2012-03-06 47 views
1

該模式匹配超過預期。如果任何人可以解釋爲什麼'地址'匹配,當它是後向部分的一部分,以及如何防止。提前感謝您的幫助。積極lookabehind在正則表達式'太好'

模式:

(?<[email protected]|)[a-zA-Z]+(?=[^\]\[]*\]) 

字符串:

test [@address|singleline second] test 

結果:

address singleline second 

回答

3

你需要躲避|

因爲(?<[email protected]|)聲明匹配的字符串的前面是@address或空字符串。 (而且,由於一切總是由空字符串,就沒有效果之前。)

順便說一句,小術語注:(?<[email protected]|)被稱爲看看背後,不看提前。看提前斷言,如您的(?=[^\]\[]*\]),斷言正則表達式中的給定點是(或不是)跟隨按指定的模式。

+0

Thx。非常有意義。感謝額外的解釋,我只是看到RegExr中的模式部分。很高興知道。 – jsuissa 2012-03-06 23:03:15

+0

@jsuissa:不客氣! – ruakh 2012-03-06 23:06:30

0

環視並不是必要的。

您似乎希望結果爲'singleline'。 (你的令牌a-zA-Z只是字母,而內部數據是空格分隔的,整個模式就是這樣。)

And address |是靜態的。

這樣,爲什麼沒少做環顧四周,只是消耗

/@address\|(\w+).*?\]/g //$1 has the capture. 

一個可能的好處,除了是簡單的:如果你不得不對大量的數據,全球範圍內運行這個,你必須匹配到最後的],而不是直到e'單行'。