是否可以通过反向引用找到独占匹配(in或group statement)?

时间:2016-02-22 20:26:11

标签: regex backreference

我正在阅读反馈here,但这完全是为了匹配整个捕获组。假设我有以下字符串:

"This is a test to find the dog."
"This is a dog that I will test."
"This test is made to test."
"This is a test to test a dog."

1和2应该匹配,3和4不应该匹配。

我想知道是否只有在testdog完全相同的情况下才能匹配字符串,因此如果首先遇到test,则只有dog将给出一个匹配,反之亦然。类似的东西:

(dog|test).*\1   

除了后引用应匹配dogtest,具体取决于首先找到的内容。

旁注: 我知道我可以用(dog.*test|test.*dog)来做,但我想知道是否可以使用反向引用(或其他方式)。

2 个答案:

答案 0 :(得分:1)

您可以使用条件测试backref,否则您只能匹配反向引用 反向引用对于捕获缓冲区是不变的,它不能被改变,只能进行有条件的测试。

示例(?:(dog)|test).*?(?(1)test|dog)

更新

未捕获两次单词

((dog)|test)(?:(?!\1).)*?(?(2)test|dog)

答案 1 :(得分:1)

当任一术语出现两次时,请使用否定前瞻以防止匹配:

^(?!.*?(test|dog).*?\1).*(test|dog).*

匹配"这是测试狗的测试。" (如预期的那样)。

请参阅live demo