2010-08-28 195 views
2

如果字符串出現多次出現的字符,我需要使用正則表達式來提供幫助。我已經驗證了兩個字符串的長度,它們將始終相等。下面是我的意思,例如。字符串「aab」和「abb」。這兩個應該匹配正則表達式,因爲它們具有重複字符,第一個字符串中的「aa」和第二個字符串中的「bb」。正則表達式匹配不止一次出現的字符

+2

「aba」是否合格? – Lazer 2010-08-28 21:13:53

+0

不,不會。我用這個來解決一個字謎問題,aba可以寫成baa或aab。我給出的第一個字符串是源字符串,第二個字符串是需要測試的字符串,因爲你可以看到它們不是字典 – Zerobu 2010-08-28 21:16:44

+0

由於'perl'與這個問題無關,所以我刪除了'perl '標籤。如果您真的需要,請詳細說明添加'perl'標籤的原因。 – BalusC 2010-08-28 21:55:09

回答

9

既然你說「ABA」式的重複不計,反向引用應該使這個簡單的:

(.)\1+ 

會發現字符序列。試試看:

java.util.regex.Pattern.compile("(.)\\1+").matcher("b").find(); // false 
java.util.regex.Pattern.compile("(.)\\1+").matcher("bbb").find(); // true 
+0

我複製並粘貼,它似乎有一個語法錯誤 – Zerobu 2010-08-28 21:28:44

+0

你複製和粘貼什麼?請注意,當您在Java字符串中使用正則表達式時,您需要轉義某些字符(請參閱我發佈的Java代碼,此代碼在此處運行)。 – vanza 2010-08-28 21:31:41

+0

我複製了你發佈的代碼 – Zerobu 2010-08-28 21:35:04

2

如果你正在檢查anagrams也許不同的算法會更好。

如果您對字符串(原始和候選)進行排序,則可以使用字符串比較來檢查字符串。

0
static final String REGEX_MORE_THAN_ONE_OCCURANCE_OF_B = "([b])\\1{1,}"; 
static final String REGEX_MORE_THAN_ONE_OCCURANCE_OF_B_AS_PREFIX_TO_A = "(b)\\1+([a])";