将排除捕获组的正则表达式
Posted
技术标签:
【中文标题】将排除捕获组的正则表达式【英文标题】:Regex that will exclude a capture group 【发布时间】:2012-02-17 17:39:07 【问题描述】:我正在编写一个正则表达式,我需要捕获以“get”开头的复数字符串。例如 getContacts
和 getBuildings
应该匹配正则表达式。但是,有时文本可能等于 getDetails 或 get**Details
。我不希望正则表达式包含这些。
我可以想出一个包含匹配组“详细信息”的正则表达式,但我想排除该捕获组,而不是包含它。
[Gg]et?\w+([Dd]etail)s
我不是很擅长正则表达式,但我对我写的内容的理解如下:
匹配“g”或“G”,然后是“et”,然后是可选的任何单词字符,然后是匹配的组,然后是“s”。
如何排除包含“详细信息”一词的结果?
【问题讨论】:
getDetailsAndBars
是否应该匹配?
应该getInfo
匹配吗?您原来的正则表达式似乎排除了这种情况。
[Gg]et?
中为什么会有问号? ?
只是使 t
可选。这是你的意图吗?
【参考方案1】:
这样的事情可能对你有用:
\b[Gg]et(?!\w*[Dd]etails)\w+s\b
【讨论】:
否定前瞻(?!...)
确保 Details 不是该匹配的一部分,\b
s 用于将匹配锚定在单词的开头/结尾,否则 GetBars
将匹配这刺痛setGetBarsX
。【参考方案2】:
我相信您正在寻找零宽度负前瞻...
http://www.regular-expressions.info/lookaround.html
[Gg]et(?![Dd]etail)\w+s
假设您要排除“获取详细信息”和“获取信息”但接受“获取页面”和“获取我的详细信息”(注意原始正则表达式中的尾随 s 已经排除了“获取信息”)
【讨论】:
您可能希望在后面加上\b
或$
,这样您就不会匹配getSassDetails
中的getSass
。
太棒了!那更近了。但看起来它仍然匹配带有详细信息的字符串:regexr.com?301ut 你能告诉我如何排除这些字符串吗?
-1,?
后面的t
是错误的,op似乎表明Details
不必和get
相邻。
@Qtax 哎呀,是的,是从他的原版中复制的,正在考虑否定匹配方面,但没有注意到。
实际上背后的负面看法涵盖了您放入正则表达式的情况,但不包括 getSomeDetailsAndNotOthers... 所以如果您也需要排除它,请使用 Qtax 的解决方案。我只是想排除以“详细信息”结尾的东西......以上是关于将排除捕获组的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章