我正在尝试创建一个以某个单词开头的正则表达式,并忽略任何其他相同的前进单词。
例如,如果我的字符串以“dog”开头并以“fish”结尾,那么如何忽略任何正在进行的“dog”字并仅匹配最后一个?
狗猫鱼
狗 狗猫鱼< - 忽略第一个单词“dog”并匹配第二个“dog”单词。
狗 狗 狗猫鱼< - 忽略第一个和第二个“狗”字并匹配第三个“狗”字。
答案 0 :(得分:3)
以下regex
有效:
(\b\w+\b |\b\w+\b$)(?!\1)
和m
标志的 g
演示:http://regex101.com/r/dW9fP5
根据您的新要求:
启用了(\b\w+\b|\b\w+\b$)(?!\1)
和m
标志的 g
答案 1 :(得分:2)
删除空格分隔的重复项:
狗狗狗猫猫鱼:
(?>(\w+) (?=\1\b))+
使用lookahead检查第一个带括号的组是否匹配(前面有空格)。
要仅在字符串开头匹配重复项,请在开头添加^
anchor:
狗狗狗猫猫鱼
^(?>(\w+) (?=\1\b))+
编辑:问题显然已更改为在一个没有空格的长字符串中匹配连续字符序列。模式修改了一点,在开始时删除至少3个字符的序列:
dogdog dogcatcatfish
^(?>(\w{3,})(?=\1))+
替换为空字符串""
答案 2 :(得分:1)