如何忽略两个字符串之间出现特定模式的字符串?

时间:2014-08-08 13:49:44

标签: regex string vba

我试图获得一个RegExp patern,我从RegExp模式的中间排除某个子模式。例如,我希望我的模式以ABC开头,以XYZ结尾,并排除123ABC之间XYZ的所有字符串。请注意,如果123位于ABCXYZ之间的任何位置,则不会匹配。

例如:

ABC45123XYZ (No-Match)    
ABCfg12XYZ (Match)    
ABC9321%$XYZ (Match)    
ABC123XYZ (No-Match)    
ABC001234XYZ(No-Match)

我尝试了以下带有前瞻阴影的模式

rex.Pattern = "ABC.+?(?!123).+?XYZ"

但这不起作用。实现这一目标的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

您可以使用negative lookahead

来实现此目的
ABC(?:(?!123).)*XYZ

<强>可视化:

Image from debuggex.com

<强>解释

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'

Demo

答案 1 :(得分:1)

         (?!ABC.*?123.*?XYZ)ABC.*?XYZ

在吃完弦之前检查。否定前瞻 http://regex101.com/r/mD7jN1/1

答案 2 :(得分:1)

你走了:

ABC(.(?!123))+?XYZ

你需要把它放在括号中并在它前面放置一个点(对于每个符号)......然后它会尝试找到任何没有跟随123的符号;)