2012-06-13 99 views
1

我被難倒了一個正則表達式問題。我一直在使用它們進行一個項目,並且他們一直在完美地工作,但是後來我遇到了一種我認爲可以用積極的前瞻來解決的情況,但是我的嘗試並沒有像我期望的那樣結果。由正則表達式(積極的前瞻性問題?)擋住

爲了說明我在下面寫了一行。其中,我想要返回兩個匹配,其中第一個包含「This」和「thisThing」,另一個包含「That」和「thatThing」,其中第一個值只能是「This」或「That 「而第二個值可以是任何(\ w *)模式。

adsf(49) asd k:38* K.This(jfkael dk&$% thisThing) and K.That($$$$ djaf aj_dfj^^^thatThing); 

我認爲這會是這樣的:

K\.(This|That) (????????????????) (\w*)(?=\)) 

含義,找到 「這」 或 「那」,即 「K.」 發生後,然後得到「)」之前的第一個單詞。但是,我並不真正瞭解如何指定(向前看,直到找到「)」,然後回溯,直至找到背後的單詞。這樣的事情可能嗎?

+1

我並不完全理解你想要做什麼,但是如果你試圖在兩個離散的令牌之間找到內容(那些內嵌對象),那麼是的,你可以做到這一點與正則表達式。 –

+0

問題很混亂。你能更好地指出一點嗎? – buckley

+0

請通過閱讀此簡要建議來改善您的問題http://worksol.be/regex.html – buckley

回答

3

你可以使用一個non-greedy quantifier

K\.(This|That).*?(\w*)\) 

或:(如果你不想要的右括號是比賽的一部分)

K\.(This|That).*?(\w*)(?=\)) 

這樣它會匹配任何之間這個和那個詞,但是它很懶惰(所以只要它發現\w*的一個很好的匹配,它就會使用它,並且如果沒有)跟隨,就回溯)

+0

很好的答案,謝謝你通過我不完美的問題。非貪婪的量詞信息。正是我需要知道的。我對正則表達式的知識在增加! – user1028435

2

如何:K\.(This|That)\(.*?(\w+)\)

這非貪婪地匹配括號之間的部分,但只要在右括號之前只剩下單詞字符就停止。