是否有可能找到具有反向引用的独占匹配项(在或组语句中)?

Is it possible to find exclusive matches (in or group statement) with a 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).*   

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

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

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

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

更新

两次未捕获单词

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

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

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

这个匹配"This is a test to test a dog."(如预期的那样)。

参见live demo