以下是我用字符串替换特殊字符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("[| |&|!|)|(|}|{|^|\"|~|*|?|:|;|\\\\|+|-]", "_"));
}
答案 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