【问题标题】:Match after Prefix, when the Ending Delimiter Varies前缀后匹配,当结束分隔符变化时
【发布时间】:2014-07-23 22:51:07
【问题描述】:

这些是我的一些测试用例:

{APIDETAILS=FOO, BAR, SING, RUN, OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING}
{APIDETAILS=FOO, OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING}
{APIDETAILS=FOO, O.P.OP3/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING}
{APIDETAILS=FOO, OP.PO.OP4/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING}
{OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING, APIDETAILS=FOO}
{OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING, APIDETAILS=FOO, SING, BAR}
{OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING, APIDETAILS=FOO, BAR, SING

注意: '}' 在最后一行故意遗漏。

我要匹配的内容: APIDETAILS 后面的所有内容,但直到 APIDETAILS 结束。如果没有明确定义则结束(寻找上述不同场景的测试用例)

我想出的正则表达式:

(?:APIDETAILS=)(.*?)(?:}|\/|$)

我能匹配的:

  1. FOO、BAR、SING、RUN、OP1
  2. FOO,OP1
  3. FOO,O.P.OP3
  4. FOO,OP.PO.OP4
  5. FOO
  6. FOO、SING、BAR
  7. Foo,BAR,SING

问题:如何消除上述匹配 1、2、3、4 中的一些噪音并最终只得到以下匹配?

我需要匹配的内容:

  1. Foo,BAR,SING,RUN
  2. FOO
  3. FOO
  4. FOO
  5. FOO
  6. FOO、SING、BAR
  7. Foo,BAR,SING

【问题讨论】:

    标签: regex regex-negation regex-greedy


    【解决方案1】:

    使用这个:

    (?m)(?<=APIDETAILS=).*?(?=,\s*\S+=|}|$)
    

    查看 the regex demo 中的匹配项。

    • (?m) 开启多行模式,允许^$ 在每一行上匹配
    • (?&lt;=APIDETAILS=) 的后视断言前面是 APIDETAILS=
    • .*? 懒惰地将字符匹配到...
    • 前瞻(?=,\s*\S+=|}|$) 可以断言后面是逗号,后跟可选空格、非空格字符和=,或| } 字符或行尾@987654333 @

    【讨论】:

      【解决方案2】:

      使用正向预测

      APIDETAILS=(.*?)(?=}|,\s*\S+=|$)
      

      Live Demo

      或者只是添加到您的非捕获组:

      APIDETAILS=(.*?)(?:}|,\s*\S+=|$)
      

      【讨论】:

        猜你喜欢
        • 2014-02-11
        • 2016-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        • 2019-10-26
        • 2019-12-19
        相关资源
        最近更新 更多