正则表达式学习

来源:互联网 发布:北大历史系知乎 编辑:程序博客网 时间:2024/06/16 09:15

http://deerchao.net/tutorials/regex/regex.htm(正则表达式30分钟入门)

(1)metacharacter(元字符)

 

/b 匹配字符串开头或结尾

/s 匹配任意的空白符

/d 匹配一位数字

' . '  除了换行符以外的任意字符

' + '匹配重复一次或多次

/w 字母,数字,下划线,汉字

^ 匹配字符串的开始

$ 匹配字符串的结尾

 

(2)

 

转义字符 /

 

重复字符

? 重复一次或多次

*  重复0~n次

(3)字符类

 

[aeiou] 表示匹配任一元音字母

[a-z] 匹配任意字母

[0-9a-z] 匹配任意字母和数字

 (4)

分支条件 ‘|’ 类似于‘或’or

(5)

分组,将部分正则表达式用括号括起来 表示一个分组,并以1-n 开始命名,也可自己命名语法(?<name>exp)

(6)断言?

就是之前之后的处理。

(?=exp)后  例子:/b/w+(?=ing/b)  以ing结尾的单词

(?<=exp)前 例子:(?<=/bre)/w+/b 以re开头的单词

负向断言:只占位置不消费任何字符 (?!=exp)

(7)

贪婪和懒惰

例:aabab

贪婪:a.*b 匹配 aabab

懒惰:a.*?b 匹配 aab

(8) 递归

  • (?'group') 把捕获的内容命名为group,并压入堆栈(Stack)
  • (?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
  • (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
  • (?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败