通俗易懂正则表达式小结

普通字符:
字母,数字,汉字,下划线以及没有特殊定义的标点符号,都是普通字符,表达式中的普通字符,在匹配一个字符串的时候,匹配与之对应的一个字符

转义字符:
\n 换行
\t 制表符
字符本身 \ ,^ , $ , ( , ) , ? , + , * , | , [ , ] , . 等等 表示匹配,^,$,(,),?,+等等

\d 任意0-9中一个数字,注意只匹配一个字符,大写表示相反,如\D的匹配全部非数字字符
\w 匹配大小写字母,下划线,0-9数字,注意只匹配其中一个字符,大写表示相反,如 \W 表示匹配非字母,非下划线,非数字所有字符
\s 匹配空格,制表符,换行等空白字符其中一个,注意只匹配其中一个字符,大写表示相反,如 \S 表示匹配非空白的所有字符
. (点号)匹配除了换行符外的任意字符,如果要包括换行则使用[\s\S],这里\s和\S是或的关系

自定义字符集合
[ab1@] 表示匹配a或b或1或@
[^abc] 表示匹配除了a,b,c之外的所有字符
[1-5a-n] 表示匹配在1-5之间以及a-n之间的字符
[^A-F0-3] 表示匹配除了在A-F,0-3之间的所有字符
[\d\d\d] 出现了3个"\d"表示以3个数字为单位进行匹配,少于3个数字的会匹配不上,等同于\d{2}和(\d\d\d)
除了^和-之外,其他 . 或 + 或 $ 等有特殊含义的字符写在方括号[]内将失去特殊意义,单纯表示该字符 ,如果要在方括号中匹配 - 和 ^ 可以使用 - 和 ^

量词
{n} 表示{n}前面的表达式匹配的字符出现n次 (n次指的是表达式匹配到的字符长度为n)
{n,m} 表示{n,m}前面表达式匹配的字符至少n次,至多m次,如\d{2,3}将会匹配所有的两位数字和所有的三位数字
{n,} 表示{n,}前面的表达式匹配的字符至少出现n次,如\d{3,}表示匹配的数字当中长度至少要3位才会被匹配到
? 表示 ? 前面的表达式将会匹配0次或1次,相当于{0,1}
+ 表示 + 前面的表达式将会匹配至少1次,相当于{1,}
* 表示 * 前表达式匹配0次或者任意次,相当于{0,}
关于{n,m}有2种模式
贪心模式 : 匹配的字符越多越好,默认就是贪婪模式如 \d{3,6}表示按3个或者6个数字为单位进行匹配
非贪心模式 : 匹配字符越少越好,一般和 ? 一起用,如\d{3,6}?表示按3个数字为单位进行匹配

字符边界
^a 表示匹配以a开头的字符
a$ 表示匹配以a结尾的字符
\b 匹配单词,如happy\b表示匹配右边不全是\w的单词,即可以匹配happy, happy++里的happy, 却不能匹配happy222中的happy,因为\b写在happy的右边,而happy222中的happy右边是数字,符合\w,所以匹配不到

选择符和分组
| 表示"或"的关系,意思是匹配 | 左边或右边的字符如 [0-9] | [a-z] 表示匹配数字或小写字母
() 捕获组,即括号内的表达式作为一整体,每个括号都有编号,默认从1开始,取结果时用反向引用,比如\1获得第一个匹配结果,\2获得第二个匹配结果
(?:Exp) 非捕获组, 与捕获组不同在于非捕获组只捕获而不保存捕获结果,节省内存,因为没保存所以通过\n是取不到内容的
\n 表示反向引用第n组匹配结果, 如字符串"baba,mama,bama" ,要匹配baba和mama先使用([a-z]{2})匹配到ba和ma,然后通过\1重复引用每个匹配结果结果的第一组匹配字符,也就是ba和ma,所以 \1 引用的也是ba和ma,所以([a-z]{2})\1能取出baba和mama这2个这样的字符

预搜索(环视)
(?=Exp) 断言位置的后面能匹配出符合Expression表达式的内容,如[a-z]+(?=ing)则会匹配所有以ing结尾的词,虽然找到了这些词,但是匹配结果只是这些词ing的前的那一部分,如eating只匹配出eat,也就是说ing是辅助搜索的, 简单来说就是[a-z]+表达式的后面字符要满足(?=ing)这个条件,只是只要[a-z]+匹配的字符而不是含ing的字符
(?!Exp) 断言需要寻找的字符串后面要满足 Exp 这个表达式,比如[a-z]+(?!\d+)表示匹配的单词后面不能带数字
(?<=Exp) 断言需要寻找的字符串前面要满足 Exp 这个表达式,比如[a-z]+(?<=\d+)表示匹配的单词前面要带至少1个数字
(?<!Exp) 断言需要寻找的字符串前面要满足 Exp 这个表达式,比如[a-z]+(?<!\d+)表示匹配的单词前面不能带数字

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值