鉴于两个正则表达式expr1
和expr1
,我们是否可以根据if-then-else结构等效地编写一个lookbehind (?<=expr1)expr2
?
例如,后方(?<=expr1)expr2
是否等同于(expr1)(?(-1)expr2|expr3)
,其中expr3
是一些永远无法匹配的正则表达式?
换句话说,两个正则表达式的(?<=expr1)expr2
和(expr1)(?(-1)expr2|expr3)
是否描述相同?
如果是,您如何选择expr3
,以便永远无法匹配?
感谢?
答案 0 :(得分:1)
两个正则表达式(?&lt; = expr1)expr2和(expr1)(?( - 1)expr2 | expr3) 描述一样吗?
否。它们匹配不同的字符串。
(?<=expr1)expr2
只能匹配一件事:expr2
,而不仅仅是任何地方:expr2
中的expr1expr2
。
相比之下,(expr1)(?(-1)expr2|expr3)
只能匹配:expr1expr2
。
显然,expr2
和expr1expr2
是不同的字符串。答案是不。
..但另一个答案是肯定的:
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)