正则表达式(|)管道操作员短路工作的条件是什么?

时间:2019-05-18 16:29:07

标签: regex

正则表达式中的pipe / or(|)运算符应该短路。但是,在下面的示例中,匹配似乎不一致。具体来说,为什么短路在第一个示例中起作用而在第二个示例中不起作用?

短路在此example中起作用:

.*#|^#.*

仅与#中的#B匹配(即使右边的匹配#B,也只有左边的模式)

在此example中,短路似乎不起作用:

#.*|.*#$

A#中的整个A#匹配(即使左侧模式在结尾处仅与#匹配并中断)

1 个答案:

答案 0 :(得分:2)

管道运算符发生短路,但匹配器将尝试尽早在字符串中进行匹配。在第二个示例中,第二个模式匹配,因为它可以匹配字符串中的第一个字符,而第一个模式则不能。这优先于|运算符的短路行为。