捕获最新的反向引用

时间:2018-04-07 16:02:20

标签: regex regex-group backreference

我有这个正则表达式

(\b(\S+\s+){1,10})\1.*MY

我希望将1组分组来捕获"名称"来自

The name is is The name MY 

我得到"是"现在。

名称可以是任何长度的任意随机词。 它不一定是开始。 它只需要2或3个单词。它可以少于10个字。 唯一确定的是它将是最后一组重复的单词。 例子:

安东尼的名字是安东尼的名字 - "名字叫安东尼"。

印度是我的国家所有印度人都是印度是我的国家 - "印度是我的国家"

印度时代字母Google是Alphabet Google食堂公司 - " Alphabet Google"

2 个答案:

答案 0 :(得分:0)

你可以尝试:

(\b\w+[\w\s]+\b)(?:.*?\b\1)

<强> As demonstrated here

说明 -

(\b\w+[\w\s]+\b)是捕获组1 - 它是重复的文本 - 由单词边界分隔 (?:.*?\b\1)是一个非捕获组,它告诉正则表达式系统匹配组1中的文本,只要它后面跟着零或多个字符,一个单词边界和重复的文本。

答案 1 :(得分:0)

正则表达式通常会抓住最重要的匹配。在你的问题中没有例子,这不会是你想要的字符串,但这可能只是意味着你没有找到很好的例子来向我们展示。

有了这个,

((\S+\s)+)(\S+\s){0,9}\1

似乎符合您目前所述的要求。如果存在例如“最长的最左边”行为仍可能妨碍跨越重复,如

this that more words this that more words

在一般情况下,单凭正则表达式不能轻易地总是优先选择最后一个匹配在其后容忍任意数量的文本。

相关问题