加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式总结

发布时间:2020-12-13 19:54:50 所属栏目:百科 来源:网络整理
导读:元字符 . 任意字符,不含换行符 * 任意多个字符,可以为0个 ? 单个字符 n 换行符 s 任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等(注意s为小写) d 数字 w 字母、数字、下划线或汉字 b 单词的开始或结束 ^ 字符串的开始 $ 字符串的结
元字符
. 任意字符,不含换行符
* 任意多个字符,可以为0个
单个字符
n 换行符
s 任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等(注意s为小写)
d 数字
w 字母、数字、下划线或汉字
b 单词的开始或结束
^ 字符串的开始
$ 字符串的结束
转义字符
. ".”自身
* "*”自身
"”自身
( "(”自身
需要使用转义字符的字符有 . * ? ^ $ + ( ) [ ] { } |
限定符
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
[0-9] 单个数字,等价于d
[aeiou] a、e、i、o或u
[a-z0-9A-Z_] 大小写字母、数字及下划线,等价于w(只考虑英文时)
| 分支条件符
(d{1,3}.){3} 重复3次"d{1,3}."
反义代码
W 任意不是字母,数字,下划线,汉字的字符
S 任意不是空白符的字符
D 任意非数字的字符
B 不是单词开头或结束的位置
[^x] 除了x以外的任意字符
[^aeiou] 除了aeiou这几个字母以外的任意字符
后向引用
1 分组1匹配的文本(默认分组组号以分组时的左括号'('为准)
(?<Word>w+)
(?'Word'w+) 指定“w+”的组名为“Word”,使用“k<Word>”来引用
分组语法
捕获
(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释
(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
(?=exp) 零宽度正预测先行断言,断言其后为exp
(?<=exp) 零宽度正回顾后发断言,断言其前为exp
(?!exp) 零宽度负预测先行断言,断言其后不为exp
(?<!exp) 零宽度负回顾后发断言,断言其前不为exp
此处exp不应为.*等通配符,否则出错
例:
(?=exp)断言自身出现的位置的后面能匹配表达式exp
对于“I'm dancing”,表达式“bw+(?=ingb)”会匹配“ingb”前的“danc”
(?<=exp)断言自身出现的位置的前面能匹配表达式exp
对于“I'm reading”,表达式“(?<=bre)w+b”会匹配“bre”后的“ading”
平衡组/递归匹配
? (?'group') 把捕获的内容命名为group,并压入堆栈(Stack)
? (?'-group') 从堆栈上弹出最后压入堆栈的名为group 的捕获内容,如果堆栈本来为空,则本分组的匹配失败
? (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配 yes 部分的表达式,否则继续匹配no部分
? (?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
如何把xx <aa <bbb> <bbb> aa> yy这样的字符串里,最长的配对的尖括号内的内容捕获出来:
< #最外层的左括号
[^<>]* #最外层的左括号后面的不是括号的内容
(
(
(?'Open'<) #碰到了左括号,向堆栈压入一个"Open"
[^<>]* #匹配左括号后面的不是括号的内容
)+
(
(?'-Open'>) #碰到了右括号,从堆栈弹出最后压入的"Open"
[^<>]* #匹配右括号后面不是括号的内容
)+
)*
(?(Open)(?!)) #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果还 有,则匹配失败
> #最外层的右括号
匹配嵌套的<div>标签:
<div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读