[图片上传中...(截屏2019-11-28下午5.07.24.png-1d936f-1574932062286-0)]
1.转义
转义.png2.限定符
限定符.png3.特殊字符
特殊字符.png1.123b$
-- 以123b 结尾
2.(v{2,3})$
-- () 子表达式
-- 以2或3个v结尾
3. [a-z]*
-- 有0个以上的小写字符
4.[a-z]+
-- 有1个以上的小写字符
5. .+
-- . 匹配任意单字符 除了\n
-- 有1个以上的字符
6.c?
-- 0个或1个c
7. a+?
--a+: 有1个以上的a
-- a+?: 只会取+的最小值(即非贪婪),也就是只能有一个a
8. ^12[a-z]+
-- 以12开始后面多个小写字符
9.^12[^a-z]+
--以12开始,但是12后面不能有小写,但是必须有字符
10.^(a|Z|c)[0-5]+
-- Z12321313 以a/Z/c开始,有多个0-5的整数
4.正则表达式中的选项
正则表达式中的选项.png1. (?i)the
-- 不区分大小写匹配the eg:The rime of the Ancyent Mariner
5.命名分组的语法
命名分组的语法.png1. 0{3}
-- 三个0
2.(?<z>0{3})
-- 三个0为一组,名字是 <z>
3.(?<z>0{3})\k<z>\k<z>
-- 三个0为一组,向后引用 结果是匹配九个0
6.定位符
定位符.png1. \b 边界
eg: 23\b
-- 23 ab
-- 123 ab
2.\B非边界
eg: 23\B
-- 234 ab
-- 1234 ab
7.选择
1.用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,使相关的匹配会被缓存 eg:(a|b)
2.此时可用?:放在第一个选项前来消除这种副作用。 eg:(?:a|b)
3.正向预查肯定符号:?=
-- 表示对后面边界的肯定匹配要求
4.正向预查否定符号:?!
--表示对后面边界的否定匹配要求
备注: 3,4都是匹配但是不获取,即选择不获取
5. \b([a-z]+) \1\b 引用
eg: 1 is is ab ab 2 a a 3 33 33
-- 边界开始多个小写, 空格 \1 是对前面()的完全引用
--
--后向引用,引用的仅仅是文本内容,而不是正则表达式!也就是说,组中的内容一旦匹配成功,后向引用,引用的就是匹配成功后的内容,引用的是结果,而不是表达式。
8.其他
(?i)不区分大小写CASE_INSENSITIVE(Java 轻微影响性能)
(?m)多行模式(^和$匹配整个字符串的头尾)MULTILINE
(?s)点号通配模式(.匹配任意字符)DOTALL
---------------------------------------------
截屏2019-11-28下午5.07.24.png
模式修正符
3、模式修正符
以(?)开头的非捕获组除了零宽度断言之外,还有模式修正符。
正则表达式中常用的模式修正符有i、g、m、s、x、e等。它们之间可以组合搭配使用。
(?imnsx-imnsx: ) 应用或禁用子表达式中指定的选项。例如,(?i-s: ) 将打开不区分大小写并禁用单行模式。关闭不区分大小写的开关可以使用(?-i)。有关更多信息,请参阅正则表达式选项。
【例1】(?i)ab
表示对(?i)后的所有字符都开启不区分大小写的开关。故它可以匹配ab、aB、Ab、AB
【例2】(?i:a)b
它表示只对a开启不区分大小写的开关。故它可以匹配ab和Ab。不能匹配aB和AB。
(?>Pattern)等同于侵占模式
4、(?>Pattern)等同于侵占模式
匹配成功不进行回溯,这个比较复杂,与侵占量词“+”可以通用,比如:\d++ 可以写为 (?>\d+)。
【例】将一些多位的小数截短到三位小数:\d+\.\d\d[1-9]?\d+
在这种条件下 6.625 能进行匹配,这样做没有必要,因为它本身就是三位小数。最后一个“5”本来是给 [1-9] 匹配的,但是后面还有一个 \d+ 所以,[1-9] 由于是“?”可以不匹配所以只能放弃当前的匹配,将这个“5”送给 \d+ 去匹配,如果改为:
\d+\.\d\d[1-9]?+\d+
的侵占形式,在“5”匹配到 [1-9] 时,由于是侵占式的,所以不会进行回溯,后面的 \d+ 就匹配不到任东西了,所以导致 6.625 匹配失败。
这种情况,在替换时就有效了,比如把数字截短到小数点后三位,如果正好是三位小数的,就可以不用替换了,可以提高效率,侵占量词基本上就是用来提高匹配效率的。
把 \d+\.\d\d[1-9]?+\d+ 改为 \d+\.\d\d(?>[1-9]?)\d+ 这样是一样的。
====== 更新
\d 任何一个数字字符(等价于[0-9])
\D 任何一个非数字字符(等价于[^0-9])
\w 等价于[a-zA-Z0-9]
\W 等价于[^a-zA-Z0-9]
\s 任何一个空白字符(等价于[\f\n\r\t\v])
\S 任何一个非空白字符(等价于[^\f\n\r\t\v])
网友评论