我有一组单词和另一组有连词。我正在寻找一个匹配任何一个单词的正则表达式,要求它们之间的连接:
(A|B|C)
(&)
A & C
,C & B
甚至A & A
A + C
,A C
或A & D
实际示例:考虑这个与平台无关的正则表达式:/(Huey|Dewey|Louie) and \1/
。
我希望它与“Huey和Louie”或“Dewey and Huey”匹配,但它只匹配“Huey和Huey”,因为反向引用仅匹配以前匹配的文本。
我可以使用/(Huey|Dewey|Louie) and (Huey|Dewey|Louie)/
重复自己,但我认为有一种更聪明的方法可以在以后重新使用捕获组。这样可行吗?
答案 0 :(得分:4)
如果您使用Perl(或具有足够兼容的正则表达式的语言),则可以执行此操作:
/(Huey|Dewey|Louie) and (?1)/
(?N)
部分是“递归子模式”,与捕获组N
中的子规则匹配相同的内容。 (\N
之类的此引用与反向引用之间的区别在于\N
匹配捕获组匹配的相同字符串。(?N)
重用正则表达式本身。)