0

我想搜索以名词adjadv开头的文本,直到它遇到<nounadjadv不应在它们和<之间再次出现。我预计这个正则表达式会起作用,但它失败了。我怎样才能使这项工作?

(noun|adj|adv)[^\1]+?<
4

2 回答 2

0

[...]括号语法将仅搜索单个字符。

在这里,您需要使用否定断言:((?!\1).)+可以做到。如果您的正则表达式语法与 perl/ecmascript 兼容。

(noun|adj|adv)((?!\1).)+<
于 2012-08-27T09:25:06.980 回答
0

以前的解决方案是半正确的,但没有一个是正确的。罗伯特完全错了。@Benoit 更接近于正确,但仍然是错误的。原因如下:http ://regex101.com/r/qI7hA6 - 引擎只会在前瞻不会失败的另一个位置匹配。您还设置了不必要的反向引用。最重要的是,您仍然允许在文本中使用名词/adj/adv。

这是一个更好的解决方案:http ://regex101.com/r/nL8lL7

/^|\G(?:noun|adj|adv)((?:(?!noun|adj|adv).)+)</gm

我希望这行得通。如果这不是您要查找的内容,请澄清,我会相应地调整表达式。

祝你好运。

于 2012-08-27T10:25:55.517 回答