public String replaceAll(String regex,String replaceme)中的regex不能有"("么???? public static void main(String[] args){
String msg = ":):)aaaaaaaaaaaaaaaa";
msg=msg.replaceAll(":)", "aa");//抛出PatternSyntaxException
System.out.println(msg);
}
但是下面这个正常
public static void main(String[] args){
String msg = ":)aaaaaaaaaaaaaaaa";
msg=msg.replace(":)", "aa");//正常
System.out.println(msg);
}
why???? 怎么解决。文档上这样讲:public String replaceAll(String regex,String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
调用此方法的 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同:
Pattern.compile(regex).matcher(str).replaceAll(repl)
注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceAll。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。
参数:
regex - 用来匹配此字符串的正则表达式
replacement - 用来替换每个匹配项的字符串
返回:
所得 String
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
从以下版本开始:
1.4
另请参见:
Pattern
String msg = ":):)aaaaaaaaaaaaaaaa";
msg=msg.replaceAll(":)", "aa");//抛出PatternSyntaxException
System.out.println(msg);
}
但是下面这个正常
public static void main(String[] args){
String msg = ":)aaaaaaaaaaaaaaaa";
msg=msg.replace(":)", "aa");//正常
System.out.println(msg);
}
why???? 怎么解决。文档上这样讲:public String replaceAll(String regex,String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
调用此方法的 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同:
Pattern.compile(regex).matcher(str).replaceAll(repl)
注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceAll。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。
参数:
regex - 用来匹配此字符串的正则表达式
replacement - 用来替换每个匹配项的字符串
返回:
所得 String
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
从以下版本开始:
1.4
另请参见:
Pattern
正則表示式有一定的規則,請參考 regular expression.
msg=msg.replaceAll( ":\\)", "aa");//抛出PatternSyntaxException
System.out.println(msg); ===================因为 ( ) 在正则表达式中 标记一个子表达式的开始和结束位置。
所以要匹配小括号,请使用 "\(" 和 "\)"又因为 \ 在 java 字符串中代表“转义” 的意思, 所以你需要用俩 \\ 来匹配