我正嘗試在Java中創建一個正則表達式來匹配特定單詞的模式以查找具有相同模式的其他單詞。例如,由於't'和'o'都重複,因此單詞「tooth」具有模式12213。我想要正則表達式匹配其他單詞,如「牙齒」。Java正則表達式與反向引用的交集
所以這裏是我使用反向引用的嘗試。在這個特定的例子中,如果第二個字母與第一個字母相同,它就會失敗。另外,最後一封信應該與其餘的不同。
String regex = "([a-z])([a-z&&[^\1]])\\2\\1([a-z&&[^\1\2]])";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("tooth");
//This works as expected
assertTrue(m.matches());
m.reset("tooto");
//This should return false, but instead returns true
assertFalse(m.matches());
我已經驗證了它的作品像「嘟嘟」如果我刪除了最後一組,即下面的例子,所以我知道的反向引用都工作到了這一點:
String regex = ([a-z])([a-z&&[^\1]])\\2\\1";
但如果我將最後一個組添加回模式的末尾,就像它不再識別方括號內的反向引用。
我做錯了什麼,或者這是一個錯誤?
當我用我的原始正則表達式在「oooto」上運行我的單元測試時,它會返回false,而不是像您說的那樣正確。然而,你建議的正則表達式似乎正在工作,因爲我需要它。謝謝。 :) – beldenge 2012-07-19 13:23:33