java - String.replaceAll 替换所有不在模式中的字符

标签 java regex string

我有一个 Java 正则表达式:

^[a-zA-Z_][a-zA-Z0-9_]{1,126}$

意思是:

  • 以字母字符或下划线字符开头。
  • 后续字符可以包括字母、数字或下划线。
  • 长度在 1 到 127 个字符之间。

现在,我想用下划线替换包含不在该正则表达式中的字符的字符串。

例子:

final String label = "23_fgh99@#";
System.out.println(label.replaceAll("^[^a-zA-Z_][^a-zA-Z0-9_]{1,126}$", "_"));

但是结果还是23_fgh99@#

如何将它“转换”为 _3_fgh99__

最佳答案

使用this code :

final String label = "23_fgh99@#";
System.out.println(label.replaceAll("^[^a-zA-Z_]|(?<!^)[^a-zA-Z0-9_]", "_"));

它输出 _3_fgh99__ .

要删除“不在原始模式中”的内容,您需要否定第一个字符类并只检查开头的一个字符( ^[^a-zA-Z_] ),然后用否定的第二个检查其他不在开头的字符字符类((?<!^)[^a-zA-Z0-9_])。然后,我们只使用交替符号 |在 1 个替换操作中应用两种模式。

关于java - String.replaceAll 替换所有不在模式中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30370786/

相关文章:

Javacc 如何使扫描器和解析器可以访问变量

Java Matcher数字方法

每当子字符串长于 x 个字符时,PHP 插入 <br/>

java - Java 中的字符串字反转给出错误的结果?

Java从受限层调用方法

java - 如何正确使用枚举进行简单的价格计算 (Java)

java - 滑动刷新布局和 ScrollView 中的 WebView

javascript - 如何在 javascript 中正则表达式一组字符? (\/)

java - 与我的正则表达式匹配时出错

string - 如何将 char 转换为 String?