正则表达式进阶
正则表达式基础
零宽度断言
- 先行断言用于判断所匹配的格式是否在另一个确定的格式之前,该确定的格式仅作为匹配的约束,并不包含在匹配结果中;
- 后发断言用于用于判断所匹配的格式是否在另一个确定的格式之后,筛选条件为其前跟随着断言中定义的格式。
符号 | 详细描述 | 格式 |
---|---|---|
?= | 正先行断言-存在 | (?=...) |
?! | 负先行断言-排除 | (?!...) |
?<= | 正后发断言-存在 | (?<=...) |
?<! | 负后发断言-排除 | ?<!...) |
贪婪匹配与惰性匹配
- 正则表达式默认采用贪婪匹配模式,即会匹配尽可能长的子串。使用
?
将贪婪匹配模式转化为惰性匹配模式。
现在有这样一个字符串:[{"AAA":"111"},{"BBB":"222"},{"CCC":"333"},{"ABC":"444"},{"AAB":"555"}]
// 正先行断言-存在 以A开头A结尾 三处匹配
A(?=A)
// 负先行断言-排除 以A开头不以A结尾 三处匹配
A(?!A)
// 正后发断言-存在 匹配 B以AA开头 一处匹配
(?<=AA)(B)
// 负后发断言-排除 匹配 B不以AA开头 四处匹配
(?<!AA)(B)
// 找 A B C A A 以 {" 开头 第一个是惰性匹配 尽可能长
(?<=\{").+ #结果:AAA":"111"},{"BBB":"222"},{"CCC":"333"},{"ABC":"444"},{"AAB":"555"}]
(?<=\{").+? #结果:A B C A A 加?为惰性匹配
// 要找 AAA BBB CCC ABC AAB 以 {" 开头 以 ": 结尾
// 1. (?<=\{") 以 {" 开头
// 2. (?=":) 以 ":结尾
// 3. .+? 至少一个 并且是惰性匹配
(?<=\{").+?(?=":)
原创不易,欢迎转载,转载时请注明出处,谢谢!
作者:潇~萧下
原文链接:https://www.cnblogs.com/manongxiao/p/14594913.html