正则表达式
GoEdge中的正则表达式使用RE2语法,可以在这里查看RE2文档。
以下摘录一些常用的正则表达式用法:
开始和结束
同其他正则表达式一样,可以使用^和$表示开始和结束:
^abc- 必须以abc开始efg$- 必须以efg结束^abc.+efg$- 匹配对象必须是以abc开始,efg结束
字符集
.- 点(.)符号表示匹配任何字符,包括换行符[abc]- 字符集,表示匹配abc字符中的任何一个[^abc]- 反向字符集,表示不匹配abc字符中的任何一个\d- 数字字符集,相当于[0-9]\D- 非数字字符集,相当于[^0-9]\w- 单词字符集,相当于[0-9A-Za-z_]\W- 非单词字符集,相当于[^0-9A-Za-z_]\s- 空白字符集,相当于[\t\n\f\r ]\S- 非空白字符集,相当于[^\t\n\f\r ]\b- 单词边界\B- 非单词边界[[:alpha:]]- ASCII字符集[[:^alpha:]]- 非ASCII字符集\pN- Unicode字符集,只有一个字符\p{Greek}- Unicode字符集\p{Han}- 中文字符集\PN- 非Unicode字符集,只有一个字符\P{Greek}- 非Unicode字符集
组合
xy-x和y相邻,y紧跟x之后x|y-x或y,遇到x即宣告匹配成功
重复
x*- 0或多个x,尽可能匹配最多的xx+- 1或多个x,尽可能匹配最多的xx?- 0或1个x,尽可能匹配最多的xx{n,m}- n到m个x,尽可能匹配最多的xx{n,}- n个以上的x,包括n个x,尽可能匹配最多的xx{n}- n个xx*?- 0或多个x,尽可能匹配最少的xx+?- 1或多个x,尽可能匹配最少的xx??- 0或1个x,尽可能匹配最少的xx{n,m}?- n到m个x,尽可能匹配最少的xx{n,}?- n个以上的x,包括n个x,尽可能匹配最少的xx{n}?- n个x
分组
使用圆括号进行分组:
(re)- 编号从1开始,0表示全部匹配的内容- 比如
(hello)(world)匹配结果就有两个分组,编号分别为1和2
- 比如
(?P<name>re)- 命名分组- 比如使用
(?P<myName>\w+)来匹配ZhangSan,那么myName对应的值就被定义为ZhangSan
- 比如使用
(?:re)- 跳过分组- 比如
(?:hello)(world)匹配结果就只有一个分组(world),编号为1;因为hello这个分组被跳过
- 比如
标记
在别的正则表达式中称之为修饰符(modifier):
i- 表示大小写 不 敏感m- 多行匹配,如果有$结束字符的时候需要此标记s- 让点符号(.)也匹配\nU- 非贪婪模式,匹配结果尽可能少地匹配
使用(?FLAG)或(?:FLAG)语法来使用这些标记,并且这里的括号并不会产生新的分组:
(?i)hello
(?i:hello)
以上两个表达式都表示大小写不敏感,所以HELLO、Hello、hello都认为匹配成功。
转义字符
使用反斜杠表示转义字符,用来表示某个字符是原始的字符,而不是正则表达式,比如匹配文件扩展名:
\.(php|asp|jsp|py)
中的点(.)因为在正则表达式中有别的意义,所以需要用反斜杠转义。