2015-07-21 43 views
1

我想拿出一個正則表達式將確定ABC = 123456實例| 123456從下面的代碼片段:正則表達式:匹配字符或新的生產線之間的一切

xyz=abcdef|abcdef||abc=123456|123456||cat=dog|dog||foo=bar|bar|| 
xyz=abcdef|abcdef||abc=123456|123456 
xyz=abcdef|abcdef||abc=123456|123456|| 
abc=123456|123456||xyz=abcdef|abcdef|| 

這裏的要求是:匹配字符串可以有一個尾隨雙管或它不能擁有它。

我目前使用這樣的:

/abc=(.*?)+((?=\|\|)|(?=\r|\n))/ 

但這似乎與比賽的結束OR條件打破。

提前感謝任何幫助。

預覽鏈接: http://regexr.com/3be2t

+0

我用/ ABC = \ d {6} \ | \ d {6} /對於一個非常簡單的匹配。你正在使用lookarounds,任何特定的原因? – ydobonebi

+0

我想我需要了解你準確匹配的內容,你想要避免匹配的內容以及匹配的精確上下文。鑑於我讀過的這個技巧,但顯然我錯過了一些東西,如果你覺得有必要使用環視..... – ydobonebi

+0

你可能想再看看'(。*?)+'部分。結合一個'*'和一個'+'似乎是多餘的,並且可能比你原先預期的要多。 – Vache

回答

0

您可以使用該行的錨,而不是\r\n的結束,你必須刪除它只是(.*?)後存在+。與+,它進行貪婪的匹配,並且捕獲組必須包含一個空字符串。

\babc=(.*?)(?=\|\||$) 

\babc=(.*?)(?=\|\||\r|\n) 

DEMO

+0

這樣做,謝謝! – sbay