2016-07-15 54 views
2

我想將字符串(基本上是正則表達式本身)轉換爲小寫字母,但我想排除元字符轉換。將字符串轉換爲小寫字母,但所有元字符除外

例如:

如果我做

String x = "[\\s\\S]*Test Message Indicator: (.*)[\\s\\S]*"; 
x = x.toLowerCase(); 

它也將轉換爲資本S\\Ss這將改變一個正則表達式的含義。

我想避免這種情況。

最終正則表達式應該像[\\s\\S]*test message indicator: (.*)[\\s\\S]*

有沒有什麼辦法可以輕鬆做到這一點?

+6

難道你不能只在大小寫敏感的情況下使用它嗎? – shmosel

+2

不帶字符串函數。你需要一個能夠識別正則表達式的東西,這可能不會發生。一些用來標記正則表達式的庫,並且讓你只處理正則表達式中的「文本節點」,但是找到這樣的東西對於這個網站來說是無關緊要的。 –

+1

如果整個值不能被視爲正則表達式,我建議不要將正則表達式內聯到你的值中。保持關注點分離。否則,你將不得不編寫自己的解析器來分解並提取值,如果沒有某種模板,這將非常困難 –

回答

1

您可以使用佔位符(您知道不會在輸入字符串中)來交換正則表達式的大寫預定義字符類。例如,更換有Unicode值00A000A100A2\S\D\W分別(或任何字符你預料到永遠也看不到值),小寫的字符串,並用特殊字符備份替換:

String x = "[\\s\\S]*Test Message Indicator: (.*)[\\s\\S]*"; 
x = x.replaceAll("\\\\S", "\u00A0").replaceAll("\\\\D","\u00A1").replaceAll("\\\\W","\u00A2");; 
x = x.toLowerCase(); 
x = x.replaceAll("\u00A0", "\\\\S").replaceAll("\u00A1","\\\\D").replaceAll("\u00A2","\\\\W");; 
System.out.println(x); 

授予這隻佔幾個常見的大寫字符類(並可能是低效的,具體取決於上下文) - 如果正則表達式很複雜並且需要考慮所有可能的大寫正則表達式值,則需要查閱API

+0

這可能會起作用,但它需要考慮所有可能的正則表達式元字符。如[這裏描述](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#sum)。 – gregn3

+0

@ gregn3優點。我已經更新了答案,以便更明確 – copeg

+0

是的,如果OP意圖多次使用它,它應該是一個通用的解決方案。 – gregn3

相關問題