【问题标题】:Regex match between tags if they contain a target如果标签包含目标,则标签之间的正则表达式匹配
【发布时间】:2015-05-24 04:22:28
【问题描述】:

我有一个字符串,其中包含标签BEGIN 和END,其中包含任何数字或字母A-Z 0-9,没有空格。

我想将标签与某个目标进行匹配。

例如,给定 String BEGIN11119991112AADFSFENDBEGINASSD12UHYEND 和目标 999 这将匹配

BEGIN11119991112AAdFSfEND 和 不是 BEGINASSD12UHYEND

我试过BEGIN.*999.*END

我认为它需要先行检查目标是否位于结束标记之前。

【问题讨论】:

    标签: java regex string string-matching


    【解决方案1】:

    你可以使用这个正则表达式:

    BEGIN(?:(?!BEGIN).)*999(?:(?!BEGIN).)*END
    

    RegEx Demo

    【讨论】:

    【解决方案2】:

    你可以试试这个:

    BEGIN(.*999.*?)END
    

    匹配后,您将能够单独获得该号码。

    如果你不想匹配那么:

    BEGIN.*999.*?END
    

    您几乎是正确的,只需添加?。

    DEMO

    【讨论】:

    • 不,如果BEGIN...END 块(没有999)出现在BEGIN.*?999.*?END 之前,则此正则表达式将不起作用,例如:BEGINfooENDabcd123BEGIN11119991112aAdfsfENDBEGINASSd12UHYEND
    • 哦,是的。谢谢@anubhava
    【解决方案3】:

    两全其美

    BEGIN((?:(?!BEGIN).)*999.*?)END
    

    匹配 BEGIN 后跟并捕获以下组:零个或多个此非捕获组:任何与 BEGIN 不匹配的字符;后跟999,后跟零个或多个任意字符,直到END(但不包括)的第一个匹配项。

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 2011-03-31
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多