如果我想匹配一组字符,应该使用什么样的正则表达式,但只有两组相同时才匹配?用于匹配连续字符串的正则表达式
例如,下面应该匹配
Hello John, Goodbye John. Hello Amy, Goodbye Amy.
但这些不应该匹配
Hello John, Goodbye Amy. Hello Amy, Goodbye John.
如果我想匹配一组字符,应该使用什么样的正则表达式,但只有两组相同时才匹配?用于匹配连续字符串的正则表达式
例如,下面应该匹配
Hello John, Goodbye John. Hello Amy, Goodbye Amy.
但这些不应该匹配
Hello John, Goodbye Amy. Hello Amy, Goodbye John.
根据您的正则表达式引擎,可以使用反向引用的正则表达式来指代(和匹配)以前匹配的项目:
Hello (\w+), Goodbye \1.
只有在“Goodbye”后面的文字与第一个匹配完全匹配时,才会产生匹配。 “你好”之后的单词)。
实施例的使用(在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. ')
[]
使用反向引用是解决此问题的简单方法。这些是对表达式中以前带括号的元素的引用。
例如,下面将只匹配,如果反向引用匹配 “约翰”:
/你好(约翰),再见($ 1)/
的$ 1进行确保第二元件相匹配的第一个。
更适用于您的问题,下面将允许任何单词字符(名称):
/你好(\ w +),再见($ 1)/ GI
干杯, 摹
据我所知,这只是简单地尝试匹配'$'(行尾/字符串)和'1',我不知道任何正确的反向引用的正则表达式。它在更换时起作用,但在比赛期间不起作用。另外,欢迎来到Stack Overflow。 – Kobi
我认为这是Perl。 'perl -e'print“Hello John,Goodbye John”=〜/ Hello(John),Goodbye($ 1)/'' – nneonneo
@nneonneo - 我不太了解perl,但是:** 1。** http: //perldoc.perl.org/perlre.html没有提及它。 ** 2。**看起来'$ 1'试图将当前'$ 1'的值插入到模式中,很像'$ varname'。创建正则表达式时,它应该是空的(空),因此它与'/ hello(\ w +),再见()/'相同。快速测试:http://ideone.com/nOp2B,下面是另一个有趣的地方,我们捕获'$ 1':http://ideone.com/YPOH2 – Kobi
是它只适用于你想匹配的上面的行,或者你会有一个字符串数量不同的字符串吗? – Cdeez
是你的标准,该名称应连续相同?是否有一组特定的谓词(Hello/Goodbye),或者你想在任何标点符号后检查?它是一大块文字或一系列句子的一部分吗?你需要澄清你的问题。 –