2015-04-04 41 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個值。