正则表达式

正则表达式是文本处理极为重要的技术,1970年代,Unix之父Ken Thompson将正则表达式引入到Unix文本编辑器sed和grep中,由此正则表达式普及开来。

1980年后,perl语言对Henry Spencer编写的库扩展了很多新的特性,1997年开始,Philip Hazel开发出了PCRE,被php和httpd等工具采用。

正则表达式应用极其广泛,shell中处理文本的命令,各种高级编程语言都支持正则表达式。

参考 https://www.w3cschool.cn/regex_rmjc/

元字符(metacharacter)

代码 说明 举例
. 匹配除换行符外任意一个字符 .
[xyz] 字符集合,只能表示一个字符位置,匹配所包含的任意一个字符 [xyz]匹配xvvz中的'xz'
[^xyz] 字符集合,只能表示一个字符位置,匹配除去所包含字符的任意一个字符 [^xyz]匹配xvvz中的'vv'
[a-z] 字符范围,也是一个集合,表示一个字符位置,匹配所包含的任意一个字符 [a-z][A-Z][0-9]
\b 匹配单词边界 \bb 匹配已b开头的字符
\B 匹配非单词边界 \Bb 匹配不以b开头的含有b的单词
\d [0-9]匹配0-9之间的任意一个数字 \d
\D [^0-9]匹配任意一个非数字的字符 \D
\s 匹配一位空白字符,包括换行符,制表符,空格 \s
\S 匹配一位非空白字符 \S
\w 匹配[a-zA-Z0-9_]包括中文的字符 \w
\W 匹配\w之外的任意字符 \W

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Linux下换行符是\n,win下换行符是\r\n

单行模式

.可以匹配所有字符,包括换行符

^表示整个字符串的开头,$表示整个字符串的结尾

多行模式

.可以匹配除了换行符之外的字符

^表示行首,$表示行尾

^表示整个字符串的开始,$表示整个字符串的结尾,开始指定的是\n后紧接着下一个字符,结束指的是/n前的字符

转义: \,  \\表示\

重复

代码 说明 举例
* 表示前面的正则表达式会重复0次或多次 a\w* 单词中有a然后后面是非空白字符
+ 表示前面的正则表达式重复至少一次 a\w+ 单词中a后面至少有一个非空白字符
表示前面的正则表达式会重复0次或1次 a\w? 单词中a后面最多有一个空白字符
{n} 重复固定的n次 a\w{1}单词中a后面只能有一个非空白字符
{n,} 重复至少n次 a\w{1,}等价a\w+ a\w{0,}等价e\w*a\w{0,1}等价e\w?
{n,m} 重复至少n次,最多m次 a\w{0,10}单词中a后面至少1个,至多10个非空白字符
x|y 匹配x或者y w|food或者(w|f)ood,匹配wood或者food
(pattern) 使用小括号指定一个分组,配好从1开始 (very)
\数字 匹配对应的分组 (very) \1
(?:pattern) 改变优先级,不认为是分组 (:?very),不是分组不能用数字调用
(?=exp) 断言exp一定在匹配的右边出现,一定有exp后缀 f(?=oo)f后面一定有oo出现,匹配是f而不是oo
(?<=exp) 断言exp一定在匹配的左边出现,一定有exp前缀 (?<=t)ook,匹配ook前面一定有t出现,匹配ook
(?!exp) 断言后面一定不是exp too(?!d),匹配too后面不是d的too
(?<!exp) 断言前面一定不是exp (?<!f)ood 匹配ood左边不是f的ood

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

断言不占分组号

正则表示工作在贪婪模式中,默认匹配更长的字符,非贪婪模式需要在符号前面加一个?,表示尽量少的匹配

代码 说明
*? 匹配任意次,尽可能的少匹配
+? 匹配至少一次,尽可能的少重复匹配
?? 匹配0次或者1次,尽可能的少重复匹配
{n,}? 匹配至少n次,尽可能的少重复
{n,m}? 匹配至少n次,至多m次,尽可能的少重复
posted @ 2017-10-30 23:09  客Ren  阅读(248)  评论(0编辑  收藏  举报