正则表达式进阶

正则表达式基础
零宽度断言

  • 先行断言用于判断所匹配的格式是否在另一个确定的格式之前,该确定的格式仅作为匹配的约束,并不包含在匹配结果中;
  • 后发断言用于用于判断所匹配的格式是否在另一个确定的格式之后,筛选条件为其前跟随着断言中定义的格式。
符号 详细描述 格式
?= 正先行断言-存在 (?=...)
?! 负先行断言-排除 (?!...)
?<= 正后发断言-存在 (?<=...)
?<! 负后发断言-排除 ?<!...)

贪婪匹配与惰性匹配

  • 正则表达式默认采用贪婪匹配模式,即会匹配尽可能长的子串。使用 ? 将贪婪匹配模式转化为惰性匹配模式。

现在有这样一个字符串:[{"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

posted @ 2021-03-29 23:12  潇~萧下  阅读(53)  评论(0编辑  收藏  举报