2

如果我想匹配一组字符但仅在两组相同时才匹配,我应该使用哪种正则表达式?

例如,以下应该匹配

Hello John, Goodbye John. Hello Amy, Goodbye Amy.

但这些不应该匹配

Hello John, Goodbye Amy. Hello Amy, Goodbye John.

4

2 回答 2

3

根据您的正则表达式引擎,您可以在正则表达式中使用反向引用来引用(和匹配)以前匹配的项目:

Hello (\w+), Goodbye \1.

仅当“Goodbye”之后的文本与第一个匹配项(即“Hello”之后的单词)完全匹配时,才会产生匹配项。

示例用法(在 Python 中):

>>> re.findall(r'Hello (\w+), Goodbye \1.', 'Hello John, Goodbye John. Hello Amy, Goodbye Amy. ')
['John', 'Amy']
>>> re.findall(r'Hello (\w+), Goodbye \1.', 'Hello John, Goodbye Amy. Hello Amy, Goodbye John. ')
[]
于 2012-08-26T05:04:43.210 回答
1

使用反向引用是解决此问题的一种简单方法。这些是对表达式中先前带括号的元素的引用。

例如,仅当反向引用与“John”匹配时,以下内容才会匹配:

/你好(约翰),再见(1美元)/

$1 将确保第二个元素与第一个元素匹配。

更适用于您的问题,以下将允许任何单词字符(名称):

/你好(\w+),再见($1)/gi

干杯,G

于 2012-08-26T05:11:10.457 回答