2009-09-29 176 views
1

我想在Java正則表達式中使用反向引用,但似乎我沒有按照正確的方式執行並且無法正常工作。我希望能夠匹配由2個相同引號包圍的字符串部分,比如說查找字符串是否包含"whatever"'whatever'匹配兩個相同字符之間的字符串

然後我寫了下面的代碼:

Pattern p = Pattern.compile("(\"|\')whatever\1"); 
Matcher m = p.matcher("'whatever'loremipsumblah"); 
System.out.println(m.find()); // always returns false 

...但似乎後面引用不工作,因爲匹配找不到匹配的模式字符串的任何部分。我希望你們能夠幫助我,因爲我肯定會陷入困境:|

回答

3

將數字「1」之前的反斜槓移出。否則,序列「\ 1」被解釋爲字符U + 0001的八進制轉義。

Pattern p = Pattern.compile("(\"|\')whatever\\1"); 
+0

我忘了它,不知道爲什麼,認爲它會導致「\」字符後跟一個......感謝指出我的愚蠢! – 2009-09-30 00:30:29

+0

與某些語言不同,Java會將String文字中的未知轉義視爲語法錯誤。所以字符串中的字符'\'必須總是被轉義。 – 2009-09-30 02:31:31

0

也許你應該試試「尋找」而不是「發現」。這樣的事情:

Pattern p = Pattern.compile("(\"|\')whatever\\1"); 
Matcher m = p.matcher("\"whatever\""); 

if (m.lookingAt()) 
    System.out.println(m.group()); 
相關問題