2015-04-04 19 views
1

我想设计一个正则表达式将捕获在一个较大的字符串包含至少两次的字母所有序列:正则表达式 - 匹配冗余序列

例如,让我们:

abzabuiabuz => a, b, ab, z, bu, u 

我正在考虑向前看和向后看,但我看不到一个合适的解决方案。

非常感谢您的帮助!

编辑:

我原来的问题是要找到-a-beu-a us-b eu-c eu-b us-a us-a

+0

你正在运行哪个lang? – 2015-04-04 10:31:40

+0

我没有使用任何特定的语言,我只是想知道是否有可能得到这个算法只是与正则表达式,因为我觉得他们非常优雅 – Gege 2015-04-04 20:39:25

回答

1

捕获一个或多个字符并对这些捕获的字符进行反向引用,然后将整个模式放入正向超前断言中。

(?=(.+).*\1) 

DEMO

获得来自组索引复制的字符1.

+0

非常好的谢谢。 – Gege 2015-04-04 10:11:12

+0

你的意思是这个https://regex101.com/r/jV2tO0/2或https://regex101.com/r/jV2tO0/3? – 2015-04-04 10:13:32

+0

( - \ w)(?=。*?\ 1)几乎没问题,但我仍然有3个匹配-a,-b,-a,而我最多只想要一次,所以-a,-b – Gege 2015-04-04 20:43:46

0

可以使用following regex

\b\S+-(?:a|b)\b 

它将匹配您在-a结尾的字符串中的所有单词或-b

eu-a 
us-b 
eu-b 
us-a 
us-a 

如果你需要真正得到公正-a S和-b S,你可以使用正则表达式\b\S+(-(?:a|b))\b抢第1个值。