RegEx前瞻但不是紧随其后

时间:2014-11-23 11:14:15

标签: regex

我正在尝试匹配荷兰ge-berg-te等术语。 berg本身就是一个名词,ge ... te是一个外围词,即geberg不存在,bergte也不存在。 gebergte。我想要的是一个匹配berggebergte的RegEx,使用环视。我以为这会起作用

\b(?i)(ge(?=te))?berg(te)?\b

但事实并非如此。我猜是因为前瞻只检查紧接着的后续字符,而不是跨字符。是否有任何方法可以将字符与前瞻相匹配,而不受这些字符必须紧跟其他字符的约束?

有效匹配为:

  • 伯格
  • 伯格
  • Gebergte
  • gebergte

无效匹配可以是:

  • Geberg
  • geberg
  • Bergte
  • bergte

ge- / Ge-和-te总是必须一起发生。请注意,我想通过前瞻来尝试这个。我知道它可以做得更简单,但我想看看它在方法上是否可以做这样的事情。

1 个答案:

答案 0 :(得分:1)

这是一个基于非外观的正则表达式:

\b(berg|gebergte)\b

将其与i(忽略大小写)标志一起使用。此正则表达式使用交替和字边界来搜索完整的单词berggebergte

RegEx Demo

基于回顾的正则表达式:

(?<=\bge)berg(?=te\b)|\bberg\b

此正则表达式使用前瞻和后瞻搜索berg前面的ge,后跟te。或者,它使用单词边界断言器berg匹配完整的单词\b,这也是锚点^$的0宽度断言器。