zoukankan      html  css  js  c++  java
  • 正则表达式进阶

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

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

    贪婪匹配与惰性匹配

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

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

  • 相关阅读:
    C# dynamic使用
    Linq简介二
    遇事处理方式
    为什么select关键字没有放到前面而是放到了后面
    decimal、float、double区别
    ViewBag、ViewData、TempData区别
    CommandBehavior.CloseConnection的使用
    LINQ简介一
    ViewBag、ViewData使用
    SQL Server 使用WriteText 存储大容量数据
  • 原文地址:https://www.cnblogs.com/manongxiao/p/14594913.html
Copyright © 2011-2022 走看看