懒洋洋地搜索文本

时间:2012-08-27 09:19:47

标签: regex

我想搜索以名词 adj adv 开头的文字,直到遇到< 名词 adj adv 不应再次出现在< 之间。我预计这个正则表达式会起作用,但它失败了。我怎样才能做到这一点?

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

2 个答案:

答案 0 :(得分:0)

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

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

(noun|adj|adv)((?!\1).)+<

答案 1 :(得分:0)

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

以下是更好的解决方案:http://regex101.com/r/nL8lL7

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

我希望这有效。如果它不是你想要的,请澄清,我会相应调整表达式。

祝你好运。