該模式匹配超過預期。如果任何人可以解釋爲什麼'地址'匹配,當它是後向部分的一部分,以及如何防止。提前感謝您的幫助。積極lookabehind在正則表達式'太好'
模式:
(?<[email protected]|)[a-zA-Z]+(?=[^\]\[]*\])
字符串:
test [@address|singleline second] test
結果:
address singleline second
該模式匹配超過預期。如果任何人可以解釋爲什麼'地址'匹配,當它是後向部分的一部分,以及如何防止。提前感謝您的幫助。積極lookabehind在正則表達式'太好'
模式:
(?<[email protected]|)[a-zA-Z]+(?=[^\]\[]*\])
字符串:
test [@address|singleline second] test
結果:
address singleline second
你需要躲避|
:
因爲(?<[email protected]|)
聲明匹配的字符串的前面是@address
或空字符串。 (而且,由於一切是總是由空字符串,就沒有效果之前。)
順便說一句,小術語注:(?<[email protected]|)
被稱爲看看背後,不看提前。看提前斷言,如您的(?=[^\]\[]*\])
,斷言正則表達式中的給定點是(或不是)跟隨按指定的模式。
環視並不是必要的。
您似乎希望結果爲'singleline'。 (你的令牌a-zA-Z只是字母,而內部數據是空格分隔的,整個模式就是這樣。)
And address |是靜態的。
這樣,爲什麼沒少做環顧四周,只是消耗:
/@address\|(\w+).*?\]/g //$1 has the capture.
一個可能的好處,除了是簡單的:如果你不得不對大量的數據,全球範圍內運行這個,你必須匹配到最後的]
,而不是直到e
'單行'。
Thx。非常有意義。感謝額外的解釋,我只是看到RegExr中的模式部分。很高興知道。 – jsuissa 2012-03-06 23:03:15
@jsuissa:不客氣! – ruakh 2012-03-06 23:06:30