2016-05-13 64 views
2

我有一個正則表達式,它刪除所有非字母數字字符。除^之外的所有特殊字符都可以正常工作。下面是我正在使用的正則表達式。如何轉義Java中正則表達式中的字符

String strRefernce = strReference.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}]", "").toUpperCase(); 

我嘗試了修改,以

String strRefernce = strReference.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}]\\^", "").toUpperCase(); 

String strRefernce = strReference.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}\\^]", "").toUpperCase(); 

但這些也不能刪除這個符號。 有人可以幫助我這個。

+0

這給出了編譯錯誤 – Neel

+1

裏面有一個'^' - 刪除它。使用'「[^ \\ p {IsAlphabetic} \\ p {IsDigit}]」' –

+0

我已經嘗試了兩種方式,如上所述,我可能沒有把它放在正確的位置,但這正是我想要的知道。 – Neel

回答

1

[^...]裏面的第一個^是一個否定標記,它使得字符類成爲否定字符(與內部字符不匹配)。

裏面的第二個被認爲是一個文字 - 因此,它不應該與正則表達式匹配。刪除它,並且光標將得到與之匹配:

"[^\\p{IsAlphabetic}\\p{IsDigit}]" 

甚至更​​短:

"(?U)\\P{Alnum}" 

\P{Alnum}類代表比其他任何字符的字母數字字符:[\p{Alpha}\p{Digit}](見Java regex reference) 。當您通過(?U)時,\P{Alnum}類將不匹配Unicode字母。見this IDEONE demo

如果您想要除去除\\p{IsAlphabetic}\\p{IsDigit}以外的符號的整個塊,最後在末尾添加+

enter image description here

+0

謝謝。將嘗試並更新。 – Neel

+0

截圖來自[OCPSoft網站](http://www.ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/) –

+0

非常感謝。有效。添加+符號可以一次去除一組特殊字符,而不是逐個去除。你是這個意思嗎? – Neel

1

這也適用。

System.out.println("Text 尖酸[刻薄 ^, More _0As text °ÑÑ"".replaceAll("(?U)[^[\\W_]]+", " ")); 

輸出

Text 尖酸 刻薄 More 0As text Ñ Ñ 

不知道,但這個詞可能是alphanum字符的更全面的清單。

[\\W_]是一個包含非單詞和下劃線的類。

當放入負Java類構造變得

[^[\\W_]]是負類沒有和
含非字和下劃線類之間的聯盟。

相關問題