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

时间:2015-05-21 10:14:11

标签: java regex string

我有一个Java正则表达式:

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

这意味着:

  • 以字母字符或下划线字符开头。
  • 后续字符可能包含字母,数字或下划线。
  • 长度介于1到127个字符之间。

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

示例:

23_fgh99@#

但结果仍是_3_fgh99__

如何将其“转换”为@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "custom-editor" } }) @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })

1 个答案:

答案 0 :(得分:3)

使用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_])。然后,我们只使用交替符号|在一次替换操作中应用两种模式。