我们可以用if-then-else重写lookbehind吗?

时间:2014-06-10 02:08:03

标签: regex

鉴于两个正则表达式expr1expr1,我们是否可以根据if-then-else结构等效地编写一个lookbehind (?<=expr1)expr2

例如,后方(?<=expr1)expr2是否等同于(expr1)(?(-1)expr2|expr3),其中expr3是一些永远无法匹配的正则表达式?

换句话说,两个正则表达式的(?<=expr1)expr2(expr1)(?(-1)expr2|expr3)是否描述相同?

如果是,您如何选择expr3,以便永远无法匹配?

感谢?

1 个答案:

答案 0 :(得分:1)

  

两个正则表达式(?&lt; = expr1)expr2和(expr1)(?( - 1)expr2 | expr3)   描述一样吗?

否。它们匹配不同的字符串。

(?<=expr1)expr2只能匹配一件事:expr2,而不仅仅是任何地方:expr2中的expr1expr2

相比之下,(expr1)(?(-1)expr2|expr3)只能匹配:expr1expr2

显然,expr2expr1expr2是不同的字符串。答案是不。

..但另一个答案是肯定的:

Can we write a lookbehind (?<=expr1)expr2 equivalently in terms of the if-then-else construct?

是。这用于an-then-else(暗示为else):(?(?<=expr1)expr2),它也匹配expr1expr2。当然,它也使用了后视。

&#34;隐含其他&#34;听起来不对你好吗?添加|,如(?(?<=expr1|)expr2)

expr3怎么样?

您的上一个正则表达式(expr1)(?(-1)expr2|expr3)永远无法匹配expr3。如果您希望它有机会,您必须使捕获组可选:(expr1)?(?(-1)expr2|expr3)