正则表达式(二)

三、正则表达式高级

 

1. 后向引用

 

(exp)                  匹配exp,并捕获文本到自动命名的组里,命名规则为从左向右、从1开始依次分组,分组0对应整个正则表达式
/n                       重复搜索前面分组n匹配的文本
例如 /b(/w+)/b/s+/1/b,编号为1的分组为/b(/w+)/b,表示一个单词,整个表达式用来匹配重复的单词,像go go, 或者kitty kitty。

 

(?<name>exp)   匹配exp,并捕获文本到名称为name的分组里,也可以写成 (?'name'exp)
/k<name>          调用名为 name 的分组
例如上面的例子也可以写成 /b(?<Word>/w+)/b/s+/k<Word>/b

 

2. 零宽断言

 

(?=exp)              匹配exp前面的位置
(?<=exp)            匹配exp后面的位置
例如 (?<=/bre)/w+/b,匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

 

3. 负向零宽断言

 

(?<!exp)            匹配前面不是exp的位置

(?!exp)              匹配后面跟的不是exp的位置
例如 /b/w*q(?!u)/w*/b,匹配单词里包含q字母且q字母后不跟u字母的字符串,以q字母结尾的字母也可匹配。(若用 /b/w*q[^u]/w*/b,如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符,后面的/w*/b将会匹配下一个单词,于是 /b/w*q[^u]/w*/b 就能匹配整个Iraq fighting。)

 

4. 注释

 

(?#comment)    这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
要包含注释的话,最好是启用"忽略模式里的空白符"选项,这样在#后面到这一行结束的所有文本都将被当成注释忽略掉。

 

5. 贪婪与懒惰

 

当正则表达式中包含能接受重复的限定符时,通常的行为是匹配尽可能多的字符,称为贪婪匹配。有时需要匹配尽可能少的字符,称为懒惰匹配。

 

*?                     重复任意次,但尽可能少重复
+?                     重复1次或更多次,但尽可能少重复
??                     重复0次或1次,但尽可能少重复
{n,m}?             重复n到m次,但尽可能少重复
{n,}?                重复n次以上,但尽可能少重复

 

例如对于aabab,a.*b 会匹配整个字符串aabab;a.*?b 会匹配aab和ab。(最先开始的匹配拥有最高的优先权,所以第一个匹配是aab而不是ab。)

 

四、常用正则表达式

 

1. 给长串数字加分隔符(例 1,000,000) ((?<=/d)/d{3})+/b

 

2. log 文件内容(格式为 04:03:27 127.0.0.0 Hello world) @"(?<time>(/d|/:)+)/s(?<ip>(/d|/.)+)/s(?<site>/S+)"

 

3. 十六进制表达式 /b[0-9a-fA-F]+/b

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值