正则表达式:匹配字符或新的生产线之间的一切

问题描述:

我想拿出一个正则表达式将确定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

您可以使用该行的锚,而不是\r\n的结束,你必须删除它只是(.*?)后存在+。与+,它进行贪婪的匹配,并且捕获组必须包含一个空字符串。

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

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

DEMO

+0

这样做,谢谢! – sbay