【问题标题】:Regex that will exclude a capture group将排除捕获组的正则表达式
【发布时间】:2012-02-17 17:39:07
【问题描述】:

我正在编写一个正则表达式,我需要捕获以“get”开头的复数字符串。例如 getContactsgetBuildings 应该匹配正则表达式。但是,有时文本可能等于 getDetails 或 get**Details。我不希望正则表达式包含这些。

我可以想出一个包含匹配组“详细信息”的正则表达式,但我想排除该捕获组,而不是包含它。

[Gg]et?\w+([Dd]etail)s

我不是很擅长正则表达式,但我对我写的内容的理解如下:

匹配“g”或“G”,然后是“et”,然后是可选的任何单词字符,然后是匹配的组,然后是“s”。

如何排除包含“详细信息”一词的结果?

【问题讨论】:

  • getDetailsAndBars 是否应该匹配?
  • 应该getInfo 匹配吗?您原来的正则表达式似乎排除了这种情况。
  • [Gg]et? 中为什么会有问号? ? 只是使 t 可选。这是你的意图吗?

标签: regex


【解决方案1】:

这样的事情可能对你有用:

\b[Gg]et(?!\w*[Dd]etails)\w+s\b

【讨论】:

  • 否定前瞻 (?!...) 确保 Details 不是该匹配的一部分,\bs 用于将匹配锚定在单词的开头/结尾,否则 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 的解决方案。我只是想排除以“详细信息”结尾的东西......
猜你喜欢
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
相关资源
最近更新 更多