正则表达式if-then-else结构允许测试匹配组是否参与模式:
(?(2)then-pattern|else-pattern)
我想知道我是否可以测试反向引用包含的内容。
在我的情况下,反向引用的捕获组由可选的子组组成(因此它总是参与,但它可以是空的),因此测试它是否为空是足够的,但是关于测试反向引用的更普遍的问题任何模式都很有趣。
答案 0 :(得分:2)
您的问题的答案是,是的,您可以通过进一步将捕获分组与一个非可选的反向引用和备用可选的反向引用(这将覆盖&#39)来测试捕获组是否参与匹配。 ;空'变种)。
例如:
(A)2 B \ 1
将无法匹配' b' as \ 1表示失败的捕获组,而
(A)2 B \ 1? 将匹配' b' as \ 1是可选的。
所以以下是测试第一个捕获组是否为空的测试
(?:( a)?b \ 1#do first pattern |(a)?b \ 1?#do second pattern)