我想将一个字符串(基本上是一个正则表达式本身)转换为小写字母,但我想将元字符排除在转换之外。
例如:
如果我这样做
String x = "[\\s\\S]*Test Message Indicator: (.*)[\\s\\S]*";
x = x.toLowerCase();
它还会将 \\S
中的大写 S
转换为 s
,这将改变正则表达式的含义。
我想避免这种情况。
最终的正则表达式应该像 [\\s\\S]*test message indicator: (.*)[\\s\\S]*
。
有什么方法可以轻松做到这一点?
最佳答案
您可以使用占位符(您知道不会出现在输入字符串中)来换入和换出正则表达式的大写预定义字符类。例如,用 unicode 值 00A0
、00A1
、00A2
替换为 \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如果正则表达式很复杂并且您需要考虑所有可能的大写正则表达式值。
关于java - 将字符串转换为小写,但所有元字符除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38403758/