gpt4 book ai didi

java - 如果 A 存在,则匹配最后一次出现 A 后的所有 BCD..n,否则匹配任意 BCD..n

转载 作者:行者123 更新时间:2023-12-02 03:21:50 26 4
gpt4 key购买 nike

我问了这个问题,Matching if all of BCD..n exist after last occurrence of A就在昨天,我们得到了快速而准确的答案(请参阅regex demo)。我以为我可以自己完成下一部分,但很难将模式插入到前瞻结构中来模拟 If-Then-Else 条件,而 Java 正则表达式引擎不支持该条件。以下是更新后的问题陈述:

  • IF“mID00231”存在于源字符串中
    • THEN 对于字符串中最后一次出现的“mID00231”,出现一次或多次每个 {mID00054、mID00013、mID00008 , mID00065} 必须遵循它(以任意顺序),
  • 否则
    • 必须出现一次或多次任何{mID00054、mID00013、mID00008、mID00065}。

匹配源字符串将如下所示:

mID00231mID00008mID00054mID00013mID00065
mID00231mID00008mID00231mID00054mID00013mID00008mID00065
mID00054mID00065mID00008

由于缺少“mID00065”而导致不匹配的示例:

mID00231mID00054mID00013mID00008

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

mID00231mID00013mID00065mID00054mID00008mID00231mID00013mID00065

我尝试将 regex demo 中提供的解决方案放入其中进入“(THEN(?=IF))|(ELSE(?!IF))”预见构造,但到目前为止还非常不成功。如有任何帮助,我们将不胜感激。

最佳答案

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

分解:

  • 两个选项,用|分隔
    • (?:...) 中的第一个替代方案(?: 用于创建不可记住的组)
      • mID00231 查找后跟...的文字字符串
      • (?!.*mID00231) 未出现 mID00231
      • (?=.*mID00054) 任何出现 mID00054,
      • (?=.*mID00013) 任何出现 mID00013 的情况,
      • (?=.*mID00008) 任何出现 mID00008AND
      • (?=.*mID00065) 任何出现 mID00065
    • (?:...) 中的第二种选择
      • ^ 将匹配锚定到字符串的开头
      • (?!.*mID00231) 没有出现 mID00231,后跟...
      • (?:...) 中的四种替代方案
        • (?=.*mID00054) 任何出现 mID00054,
        • (?=.*mID00013) 任何出现 mID00013 的情况,
        • (?=.*mID00008) 任何出现 mID00008OR
        • (?=.*mID00065) 任何出现 mID00065

关于java - 如果 A 存在,则匹配最后一次出现 A 后的所有 BCD..n,否则匹配任意 BCD..n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39492146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com