正则表达式忽略进行的话

时间:2014-04-12 01:42:37

标签: regex

我正在尝试创建一个以某个单词开头的正则表达式,并忽略任何其他相同的前进单词。

例如,如果我的字符串以“dog”开头并以“fish”结尾,那么如何忽略任何正在进行的“dog”字并仅匹配最后一个?

狗猫鱼

狗猫鱼< - 忽略第一个单词“dog”并匹配第二个“dog”单词。

狗猫鱼< - 忽略第一个和第二个“狗”字并匹配第三个“狗”字。

3 个答案:

答案 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))+

regex101eval.in(如果是php)

进行测试

使用lookahead检查第一个带括号的组是否匹配(前面有空格)。


要仅在字符串开头匹配重复项,请在开头添加^ anchor

狗狗狗猫猫鱼

^(?>(\w+) (?=\1\b))+

test at regex101


编辑:问题显然已更改为在一个没有空格的长字符串中匹配连续字符序列。模式修改了一点,在开始时删除至少3个字符的序列:

dogdog dogcatcatfish

^(?>(\w{3,})(?=\1))+

test at regex101


替换为空字符串""

Regex FAQ

答案 2 :(得分:1)

这是一个简单的(文字)模式:

.*(dog)

替换模式:

\1 

不是最令人兴奋的,但不妨表现出来。括号中的目标词设置为匹配组\1

示例:http://regex101.com/r/yU6xO8