2012-03-23 67 views
2

我想要逃避所有的特殊字符是一個SQL查詢。所以我創建了正則表達式:java的正則表達式來逃避的Oracle SQL特殊字符

Pattern p1 = Pattern.compile("\\{ | \\} | \\\\ | \\, | \\& | \\? |" 
      + " \\(| \\) | \\[ | \\] | \\- | \\; | \\~ | \\| | \\ $ | " 
      + "\\! | \\< | \\> | \\* | \\% | \\_"); 
Matcher m1=p1.matcher(s); 

現在我希望它遍歷所有匹配,並在它之前放置一個'\'字符。例如,如果一個字符串是:aa%aa $ aa,我希望它是aa \%aa \ $ aa。我怎樣才能做到這一點?

回答

3

可以使用回參考$0指被匹配的表達式的值:

myString.replaceAll(myPattern, "\\\\$0") 

例如,

System.out.println("abcdef".replaceAll("[a-c]", "\\\\$0")); 

產生

\a\b\cdef 

注數量過多斜線替換:我需要傳遞兩個反斜槓到正則表達式(冷杉沒有人會逃避第二個),每一個我必須放兩個,以便Java自己逃跑,最後四個人。

+0

THX,它工作正常 – czadam 2012-03-23 17:26:37

3

如果你想要做的就是逃避SQL字符我會建議使用在Java中PreparedStatements,而不是試圖構建自己的逃避者。

話雖這麼說,這將是可能的正則表達式這樣做,但它不會是容易的

0

你需要捕捉與括號內的圖案像這樣

(a)(b)(c) 

和信你可以參考他們由$ +括號對

例如,序號,如果你申請的置換方式

$1\$2$3 

它會給

a\bca\bc 

在Java中,這成爲

String resultString = subjectString.replaceAll("(a)(b)(c)", "$1\\\\$2$3");