捕获最新的反向引用

Capture the latest in backreference

我有这个正则表达式

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

我想将第 1 组从

捕获 "The name"
The name is is The name MY 

我暂时得到 "is"。

名称可以是任意长度的任意单词。 它不必在开头。 它只需要 2 或 3 个单词。它可以少于 10 个单词。 唯一可以肯定的是,这将是最后一组重复的单词。 示例:

名字是安东尼是是名字是安东尼 - "The name is Anthony"。

印度是我的国家 所有印度人都是印度是我的国家 - "India is my country "

Times of India Alphabet Google 是公司 Alphabet Google 食堂 - "Alphabet Google"

你可以试试:

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

As demonstrated here

解释-

(\b\w+[\w\s]+\b) 是捕获组 1 - 这是重复的文本 - 按单词边界分隔。
(?:.*?\b) 是一个 non-capturing 组,它告诉正则表达式系统匹配组 1 中的文本,仅当其后跟 zero-or-more 个字符、word-boundary 和重复的文本时.

正则表达式通常会捕获最长的 le|tmost 匹配项。您的问题中没有示例表明这实际上不是您想要的字符串,但这可能只是意味着您没有找到好的示例来向我们展示。

除此之外,

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

似乎符合您当前所述的要求。 "longest leftmost" 行为仍然会妨碍,例如跨越重复,例如

this that more words this that more words

在一般情况下,仅凭正则表达式无法轻易地使它始终偏爱最后一个可能的匹配项 并且 容忍其后的任意数量的文本。