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