我想搜索以名词或 adj 或 adv 开头的文字,直到遇到< 。 名词, adj 和 adv 不应再次出现在< 之间。我预计这个正则表达式会起作用,但它失败了。我怎样才能做到这一点?
(noun|adj|adv)[^\1]+?<
答案 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
我希望这有效。如果它不是你想要的,请澄清,我会相应调整表达式。
祝你好运。