2012-08-27 57 views
0

我想搜索的文字開始名詞形容詞進階,直到它與<滿足。 名詞ADJ,並進階不應該他們<之間再次出現。我預計這個正則表達式可以工作,但它失敗了。我該如何做這項工作?搜索文本懶洋洋地

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

請提供您應該/不應該得到的限制性示例。 – sp00m

+0

用於調試你的正則表達式嘗試這個(神話般的)網站:http://myregexp.com –

回答

0

[...]括號語法將僅搜索單個字符。

在這裏你需要使用否定斷言:((?!\1).)+可以做到這一點。假設您的正則表達式語法與perl/ecmascript兼容。

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

以前的解決方案是半正確的,但沒有一個是正確的。羅伯特完全錯了。 @Benoit更接近正確,但仍然是錯誤的。原因如下:http://regex101.com/r/qI7hA6 - 引擎只會在另一個位置(前瞻不失敗)匹配。您還設置了不必要的反向引用。最重要的是,你仍然可以在文中使用名詞/形容詞。

這裏是一個更好的解決方案:http://regex101.com/r/nL8lL7

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

我希望這個作品。如果這不是您要查找的內容,請澄清一下,我會相應地調整表達式。

祝你好運。

+0

非常感謝你!有用! – user1610952

+0

在你自己的測試用例中,名詞與adj和adv與其他文本和它不匹配任何東西。而Benoits解決方案呢。沒有必要回溯,我同意這一點。此外,作者明確排除了您提到的事實:「名詞,形容詞和副詞不應該再次出現在它們之間並且」< –

+0

@ user1610952:如果解決方案是您要找的內容,請接受它。 @Tobias N. Sasse:是的,沒有一個字會再出現。所以如果它匹配'adj',那麼在文本中可能不會有'adj','noun'或'adv'。我的這個測試通過了,Benitos沒有。至少我是這樣理解手頭的任務的。 –