首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何忽略在两个字符串之间出现特定模式的字符串?

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

Stack Overflow用户
提问于 2014-08-08 13:49:44
回答 3查看 139关注 0票数 1

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

例如:

代码语言:javascript
复制
ABC45123XYZ (No-Match)    
ABCfg12XYZ (Match)    
ABC9321%$XYZ (Match)    
ABC123XYZ (No-Match)    
ABC001234XYZ(No-Match)

我尝试了下面的模式,并对其进行了负面展望。

代码语言:javascript
复制
rex.Pattern = "ABC.+?(?!123).+?XYZ"

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-08 14:00:02

您可以通过一个负前瞻来实现这一点。

代码语言:javascript
复制
ABC(?:(?!123).)*XYZ

Visualization:

解释:

代码语言:javascript
复制
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'

演示

票数 3
EN

Stack Overflow用户

发布于 2014-08-08 14:00:23

代码语言:javascript
复制
         (?!ABC.*?123.*?XYZ)ABC.*?XYZ

进食前检查string.Negative展望http://regex101.com/r/mD7jN1/1

票数 1
EN

Stack Overflow用户

发布于 2014-08-08 14:01:51

给你:

代码语言:javascript
复制
ABC(.(?!123))+?XYZ

你需要把它放在括号里,在它前面放一个点(每个标志).然后,它将尝试找到没有后面跟着123的任何标志;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25205062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档