2015-04-24 39 views
0

我的正則表達式:我的正則表達式是匹配,但同時用java做的不匹配

VARCHAR2+\(+[0-9]+\) 

VARCHAR2(50)匹配,但在執行的Java類的模式這則表達式匹配它不匹配。

+0

它匹配與否?何時匹配? – Radiodef

+0

您在問題中使用的語法不是Java正則表達式語法。查看javadoc的'Pattern'類。 – Kayaman

+0

我在tutorial.that中檢查了上面的表達式,正則表達式是正確的,當我用java.it做它時沒有得到。實際上我想用string.replacement替換它沒有完成。 – smith

回答

1
System.out.println("VARCHAR2(50)".matches("VARCHAR2+\\(+[0-9]+\\)")); 
result: true 

你需要使它\\

+0

雅它可能是正確的,但它不是替換字符串我已經把它放在屬性文件爲VARCHAR2 + \\(+ [0-9] + \\)= String。通過使用模式,它應該用String替換VARCHAR2(50),但它不會被替換,而屬性文件中的其他鍵值正在我的文件中成功修改。 – smith

+0

你使用replace還是replaceAll?因爲替換不是基於正則表達式的。試試這個: 「VARCHAR2(50)」。replaceAll(「VARCHAR2 + \\\(+ [0-9] + \\\)」,「替換」); –

+0

雅我使用replaceAll – smith

0

問題是與轉義特殊字符。 Java使用建立的正則表達式語法,不幸的是Java和正則表達式都使用相同的語法。

因此,Java字符串文字"VARCHAR2+\(+[0-9]+\)"表示字符序列VARCHAR2+(+[0-9]+)。在這個正則表達式中,parantheses表示分組,因此正則表達式與您的輸入字符串不匹配。

要解決這個問題,你需要兩次轉義特殊字符。 Java字符串文字"VARCHAR2+\\(+[0-9]+\\)"表示字符串VARCHAR2+\(+[0-9]+\),在這裏,隱含法被轉義,所以這個正則表達式匹配您的輸入。