前言
官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
参考文章:
在线测试网站
规则
纯字符数字
直接输入字符数字进行匹配
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(正则规则)中的空白忽略