模式匹配超出预期。如果有任何人可以解释为什么'地址'匹配,当它是看守的一部分以及如何防止它。提前感谢您提供任何帮助。
模式:
(?<=@address|)[a-zA-Z]+(?=[^\]\[]*\])
字符串:
test [@address|singleline second] test
结果:
address singleline second
答案 0 :(得分:3)
您需要转义|
:
(?<=@address\|)[a-zA-Z]+(?=[^\]\[]*\])
因为(?<=@address|)
断言匹配字符串前面是@address
或空字符串。 (并且因为所有 总是前面都是空字符串,所以没有效果。)
顺便说一下,一个小的术语:(?<=@address|)
被称为后面,而不是前面的 。看看提前断言,例如你的(?=[^\]\[]*\])
,断言正则表达式中的给定点是(或不是)跟随指定的模式。
答案 1 :(得分:0)
甚至不需要环顾四周。
您似乎希望结果为“单行”。 (你的令牌a-zA-Z只是字母,内部数据是空格分隔的,整个模式就是那个。)
并解决|是静态的。
所以,为什么不少看看,只是消费:
/@address\|(\w+).*?\]/g //$1 has the capture.
除了更简单之外,还有一个可能的好处:如果你必须在大量数据上全局运行,那么你已经匹配到最后]
,而不是最后一个e
'单线'。