文章目录
次数匹配(限制符)
次数匹配符
符号 | 描述 | 备注 |
---|---|---|
? | 0或1次 | – |
+ | 1及以上 | – |
* | 0及以上(任意次) | – |
{n} | n次 | – |
{n,} | 至少n次 | – |
{n,m} | n到m次 | (左右都是闭区间)– |
? 号跟在任意限制符后面表示非贪婪匹配(尽可能少的匹配)
o{2,5}? # 如ooooo ,它不会匹配5个,而是会匹配2个
应用
删除所有空行
^(\s*)\n # 从开头到换行, 仅包括0或者n个空格
所有非空行
^([\S| ]+) # ^表示开头。 "[\S| ]" 表示非空字符或者空格,注空格不要用\s,因为\s匹配任何空白字符,包括空格、制表符、换页符等等。
包含换行的所有字符
(.|\n) # 如果只用.号,那么只是匹配到有文字的地方,加上\n会匹配到行尾
除了字母a和b之外的所有字符
[^ba] 或者 [^ab]
查找所有单词
\b(\w*)\b # \b表示单词边界
包含er但是不以er结尾的单词
er\B # \B 非单词边界
查找姓张的,但不能是张翠山,张松溪,张无忌
张(?!翠山|松溪|无忌) # (?!pattern),预查不消耗字符
匹配
叫秦叔宝的
(秦叔宝) # (pattern) 匹配并获取
姓段的,叫正明,正淳的
段(?:正明|正淳) # (?:pattern) 匹配但不获取结果,不进行存储供以后使用(在这里其实看不出来作用)
预查(默认正向,有肯定和否定预查)
姓杨的,叫康,过的杨
杨(?=康|过) # (?=pattern) 肯定预查,非获取匹配
姓杨的,不叫康,不叫过的杨
杨(?!康|过) # (?!pattern) 否定预查,非获取匹配
反向预查
类似预查,只不过方向相反
风字结尾,叫陈玄风,梅超风,曲灵风的风
(?<=陈玄|梅超|曲灵)风 #(?<=pattern) 反向肯定预查
风字结尾,不叫陈玄风,梅超风,曲灵风的风
(?<!陈玄|梅超|曲灵)风 # (?<!pattern) 反向否定预查
发挥使用
删除代码注释(这里只考虑//,/**/这样的注释不考虑)
(?<!http:|\S)//.*$ # //及以后的字符,当然http://www.baidu.com 这样的不能删除 \S是非空白字符(但目前没理解这里的作用)
所有中文汉字
[\u4E00-\u9FA5] #推荐这个
[\u2E80-\u9FFF] #有的版本说是这个,实测包含中文句号