java - 将字符串转换为小写,但所有元字符除外

标签 java regex string lowercase

我想将一个字符串(基本上是一个正则表达式本身)转换为小写字母,但我想将元字符排除在转换之外。

例如:

如果我这样做

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

它还会将 \\S 中的大写 S 转换为 s,这将改变正则表达式的含义。

我想避免这种情况。

最终的正则表达式应该像 [\\s\\S]*test message indicator: (.*)[\\s\\S]*

有什么方法可以轻松做到这一点?

最佳答案

您可以使用占位符(您知道不会出现在输入字符串中)来换入和换出正则表达式的大写预定义字符类。例如,用 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如果正则表达式很复杂并且您需要考虑所有可能的大写正则表达式值。

关于java - 将字符串转换为小写,但所有元字符除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38403758/

相关文章:

string - 使用 string.gmatch() 通过\n 或\r 分割字符串

java.io.File.lastModified 对于链接,获取链接文件的lastModified,而不是链接文件

c# - 如何使用正则表达式在 C# 中排除方括号来分隔单词

java - 获取 Group 与 Asterisk 的匹配项?

javascript - 如何获得两个字符串数组的差异?

c - vsnprintf 和 NULL 输入字符串参数

java - GraphQL Java 类生成器

c# - 如何让protobuf-net和protostuff相互支持.Net和Java中的继承类?

java - 无法登录。Google Play 游戏 Libgdx

mysql - 在mysql选择查询中需要正则表达式