正则表达式总结

元字符
. 任意字符,不含换行符
* 任意多个字符,可以为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”,表达式“\b\w+(?=ing\b)”会匹配“ing\b”前的“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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值