Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果A存在,则在A最后一次出现后匹配所有BCD..n,否则匹配任何BCD..n_Java_Regex - Fatal编程技术网

Java 如果A存在,则在A最后一次出现后匹配所有BCD..n,否则匹配任何BCD..n

Java 如果A存在,则在A最后一次出现后匹配所有BCD..n,否则匹配任何BCD..n,java,regex,Java,Regex,就在昨天,我问了这个问题,结果得到了一个快速而准确的答案(见附录)。我原以为我可以自己完成下一部分,但我很难将该模式插入到前瞻结构中,以模拟If-Then-Else条件,而Java正则表达式引擎不支持该条件。以下是更新后的问题说明: 如果源字符串中存在“mID00231” 然后对于字符串中最后一个出现的“mID00231”每个{mID00054,mID00013,mID00008,mID00065}的一个或多个出现必须紧跟其后(以任何顺序) 其他 必须出现一个或多个出现的任何{mID00

就在昨天,我问了这个问题,结果得到了一个快速而准确的答案(见附录)。我原以为我可以自己完成下一部分,但我很难将该模式插入到前瞻结构中,以模拟If-Then-Else条件,而Java正则表达式引擎不支持该条件。以下是更新后的问题说明:

  • 如果源字符串中存在“mID00231”
    • 然后对于字符串中最后一个出现的“mID00231”每个{mID00054,mID00013,mID00008,mID00065}的一个或多个出现必须紧跟其后(以任何顺序
  • 其他
    • 必须出现一个或多个出现的任何{mID00054、mID00013、mID00008、mID00065}
匹配的源字符串如下所示:

mID00231mID00008mID00054mID00013mID00065
mID00231mID00008mID00231mID00054mID00013mID00008mID00065
mID00054mID00065mID00008
由于缺少“mID00065”而不匹配的示例:

由于最后一次出现的“mID00231”后面没有“mID00054”和“mID00008”而不匹配的示例:

我曾尝试将中提供的解决方案放入一个“(THEN(?=IF))|(ELSE(?!IF))”前瞻结构中,但到目前为止都没有成功。感谢您的帮助

(?:mID00231(?!.*mID00231)(?=.*mID00054)(?=.*mID00013)(?=.*mID00008)(?=.*mID00065))|(?:^(?!.*mID00231)((?=.*mID00054)|(?=.*mID00013)|(?=.*mID00008)|(?=.*mID00065)))
细分:

  • |
    • (?:…)
      中的第一个备选方案(创建未记忆组的
      ?:
      • mID00231
        查找后跟
      • (?!*mID00231)
        未出现
        mID00231
      • (?=.*mID00054)
        任何出现的
        mID00054
      • (?=.*mID00013)
        任何出现的
        mID00013
      • (?=.*mID00008)
        任何出现的
        mID00008
      • (?=.*mID00065)
        任何出现的
        mID00065
    • (?:…)
      • ^
        将匹配锚定到字符串的开头
      • (?!*mID00231)
        未出现
        mID00231
        ,后跟
      • (?:…)
        • (?=.*mID00054)
          任何出现的
          mID00054
        • (?=.*mID00013)
          任何出现的
          mID00013
        • (?=.*mID00008)
          任何出现的
          mID00008
        • (?=.*mID00065)
          任何出现的
          mID00065
细分:

  • |
    • (?:…)
      中的第一个备选方案(创建未记忆组的
      ?:
      • mID00231
        查找后跟
      • (?!*mID00231)
        未出现
        mID00231
      • (?=.*mID00054)
        任何出现的
        mID00054
      • (?=.*mID00013)
        任何出现的
        mID00013
      • (?=.*mID00008)
        任何出现的
        mID00008
      • (?=.*mID00065)
        任何出现的
        mID00065
    • (?:…)
      • ^
        将匹配锚定到字符串的开头
      • (?!*mID00231)
        未出现
        mID00231
        ,后跟
      • (?:…)
        • (?=.*mID00054)
          任何出现的
          mID00054
        • (?=.*mID00013)
          任何出现的
          mID00013
        • (?=.*mID00008)
          任何出现的
          mID00008
        • (?=.*mID00065)
          任何出现的
          mID00065

使用两个单独的正则表达式测试?使用两个单独的正则表达式测试?
mID00231mID00013mID00065mID00054mID00008mID00231mID00013mID00065
(?:mID00231(?!.*mID00231)(?=.*mID00054)(?=.*mID00013)(?=.*mID00008)(?=.*mID00065))|(?:^(?!.*mID00231)((?=.*mID00054)|(?=.*mID00013)|(?=.*mID00008)|(?=.*mID00065)))