我试图获得一个RegExp patern,我从RegExp模式的中间排除某个子模式。例如,我希望我的模式以ABC
开头,以XYZ
结尾,并排除123
和ABC
之间XYZ
的所有字符串。请注意,如果123
位于ABC
和XYZ
之间的任何位置,则不会匹配。
例如:
ABC45123XYZ (No-Match)
ABCfg12XYZ (Match)
ABC9321%$XYZ (Match)
ABC123XYZ (No-Match)
ABC001234XYZ(No-Match)
我尝试了以下带有前瞻阴影的模式
rex.Pattern = "ABC.+?(?!123).+?XYZ"
但这不起作用。实现这一目标的正确方法是什么?
答案 0 :(得分:3)
您可以使用negative lookahead:
来实现此目的ABC(?:(?!123).)*XYZ
<强>可视化:强>
<强>解释强>
ABC # Match literal chars 'ABC'
(?: # Begin non-capturing group
(?! # Negative lookahead: if not followed by
123 # Match Literal chars '123'
) # End of negative lookahead
. # Advance one character at a time
)* # Repeat the group zero or more times
XYZ # Match literal chars 'XYZ'
答案 1 :(得分:1)
(?!ABC.*?123.*?XYZ)ABC.*?XYZ
在吃完弦之前检查。否定前瞻 http://regex101.com/r/mD7jN1/1
答案 2 :(得分:1)
你走了:
ABC(.(?!123))+?XYZ
你需要把它放在括号中并在它前面放置一个点(对于每个符号)......然后它会尝试找到任何没有跟随123的符号;)