我有一个如下所示的源字符串:mID00231mID00008mID00231mID00054mID00013mID00008mID00065
我尝试使用这个例子创建的模式是:对于最后一次出现的" mID00231"在字符串中, {mID00054,mID00013,mID00008,mID00065}的一个或多个出现必须遵循它(任何顺序)。
比赛示例:
mID00231mID00008mID00231mID00054mID00013mID00008mID00065
mID00231mID00013mID00054mID00008mID00065mID00008
因缺少" mID00065"
而无法匹配的示例mID00231mID00054mID00013mID00008
不匹配的示例,因为最后一次出现" mID00231"没有跟随" mID00054"和" mID00008":
mID00231mID00013mID00065mID00054mID00008mID00231mID00013mID00065
我对正则表达式相当新,但通常会找到有效的东西。这一个非常困难。我试过这个:
(?:mID00231)(?:(?=.*mID00054)(?=.*mID00013)(?=.*mID00008)(?=.*mID00065).*)
如果第一个元素(mID00231)只出现一次,则它有效。如果元素重复,则模式失败。任何帮助表示赞赏。
答案 0 :(得分:1)
如果前端为负值,则需要使匹配失败:
mID00231((?!.*mID00231)(?=.*mID00054)(?=.*mID00013)(?=.*mID00008)(?=.*mID00065).*)
^^^^^^^^^^^^^^
请参阅regex demo。
<强>详情:
mID00231
- 匹配文字mID00231
文字(
- 捕获组的开始
(?!.*mID00231)
- 在0 +以上任何字符之后的任何位置都不能有mID00231
,但是换行符(?=.*mID00054)
- 0 +以上任何字符后必须有mID00054
,但换行符(?=.*mID00013)
- 0 +以上任何字符后必须有mID00013
,但换行符(?=.*mID00008)
- 0 +以上任何字符后必须有mID00008
,但换行符(?=.*mID00065)
- 0 +以上任何字符后必须有mID00065
,但换行符.*
- 0+任何字符,但换行符)
- 捕获组的结束。