在Java正则表达式中的字符类中使用方括号

时间:2017-01-10 12:26:24

标签: java regex

以下是我用字符串替换特殊字符read -r s perm= for p in r w x; do [[ "$s" == *"$p"* ]] && perm="${perm}$p" done printf '%s\n' "$perm" 而编写的正则表达式,但不知何故它无法替换&!)(}{][^"~*?:;\+-& [来自它,因为它充当正则表达式的开始和结束。我怎么能这样做?

]

现在的输出:System.out.println(" &!)(}{][^\"~*?:;\\+-".replaceAll("[| |&|!|)|(|}|{|^|\"|~|*|?|:|;|\\\\|+|-]", "_")); }

1 个答案:

答案 0 :(得分:3)

您只需要在Java正则表达式中的字符类中转义[]

此外,您不需要将|作为替换符号放在字符类中,因为它被视为文字|

System.out.println(" &!)(}{][^\"~*?:;\\+-".replaceAll("[\\]\\[ &!)(}{^\"~*?:;\\\\+-]", "_"));
// => ___________________

请参阅Java demo

†:请注意,在PCRE / Python / .NET,POSIX中,如果将它们放在正确的位置,则不必转义字符类中的方括号:[]ab[]。在JavaScript中,您总是必须逃避]:/[^\]abc[]/。在Java和ICU regexp中,您必须始终在字符类中同时转义[]。 - WiktorStribiżew171年1月10日12:39