前言
官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
参考文章:
在线测试网站
规则
纯字符数字
直接输入字符数字进行匹配
pattern 正则表达式规则
/你好/
str 要进行匹配的字符串
你好,老师
input 匹配结果
你好
元字符
| 元字符 | 匹配项 |
|---|---|
| . | 除换行符 之外的所有字符 |
| w | 字母数字下划线 |
| d | 数字 |
| s | 空格 |
| 单词的开头或结位,不占位置 | |
| ^ | 全文开头,不占位置 |
| $ | 全文结尾,不占位置 |
| [abc] | 括号内的字符 |
| a|b | a或b |
反义元字符
| 反义元字符 | 匹配项 |
|---|---|
| W | 所有非字母数字下划线 |
| D | 非数字 |
| S | 非空白行 |
| B | 非单词开头或结尾 |
| [^abc] | 非括号内的字符 |
量词
| 量词 | 匹配项 |
|---|---|
| *(贪婪) | 重复0或多次 |
| +(占有) | 重复1或多次 |
| ?(懒惰) | 重复0或1次 |
| {n} | 重复n次 |
| {n,m} | 重复n至m次 |
| {n,} | 重复n至多次 |
捕获组
一个括号内的内容,可以对捕获组进行分组,并在后面可以进行引用
| 捕获组 | 匹配项 |
|---|---|
| (exp) | exp,并且捕获文本到自动命名的组里 |
| (?<name>exp) | exp,并且捕获文本到命名的组里 |
| (?:exp) | exp,不对捕获文本分配组号 |
| (?=exp) | exp前项 |
| (?<=exp) | exp后项 |
| (?!exp) | 非exp |
| (?<!exp) | 非exp的后项 |
实例分析
-
匹配含有q但是q后面不是u的单词
一般做法:
wq[^u]w但有个漏洞,比如
Iraq,Benq,会被视为一个单词改进做法:
wq(?!u)w使用负向宽零断言,参考链接:宽零断言-百度百科
修饰符
正则表达式格式为/pattern/,修饰符是对这个正则表达式的补充说明,写在后一个/的后面
i 不区分大小写
/abc/i 可以匹配 abc aBc ABc
g 全局匹配
不带g,找到一个符合的就停止查找下一个
带g,找完所有符合的才停止
m 多行匹配
匹配字符串中含有 ,需要多行匹配
s .包含换行符
加了s使 "." 可以表示所有字符(包括换行符 )
U 不重复匹配
只匹配最近的一个字符串
x 忽略模式中的空白
将模式pattern(正则规则)中的空白忽略