繁体   English   中英

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

[英]java - String.replaceAll to replace all characters not in pattern

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

使用此代码

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次更换操作中应用这两种模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM