捕获最新的反向引用
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)
解释-
(\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
在一般情况下,仅凭正则表达式无法轻易地使它始终偏爱最后一个可能的匹配项 并且 容忍其后的任意数量的文本。
我有这个正则表达式
(\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)
解释-
(\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
在一般情况下,仅凭正则表达式无法轻易地使它始终偏爱最后一个可能的匹配项 并且 容忍其后的任意数量的文本。