我有一个 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/