2016-07-15 59 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

相关问题