是否有可能找到具有反向引用的独占匹配项(在或组语句中)?
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 不匹配。
我想知道是否只有当 test
和 dog
完全从彼此中找到时才可以匹配字符串,所以如果首先遇到 test
,则只有 dog
将进行匹配,反之亦然。类似于:
(dog|test).*
除了反向引用应匹配 dog
或 test
,具体取决于首先找到的内容。
旁注:
我知道我可以使用 (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。
我正在阅读反向引用 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 不匹配。
我想知道是否只有当 test
和 dog
完全从彼此中找到时才可以匹配字符串,所以如果首先遇到 test
,则只有 dog
将进行匹配,反之亦然。类似于:
(dog|test).*
除了反向引用应匹配 dog
或 test
,具体取决于首先找到的内容。
旁注:
我知道我可以使用 (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。