如何打印$或\\关于正则表达式的东西

时间:2014-10-24 04:17:17

标签: java regex

你能解释一下34吐出错误的原因吗?

在1和2个案例中,我得出结论,转义语法需要两个\字符,如java中的\\

但在34个案例中,它不起作用。

特别是在4情况下,更奇怪的是当我放\\\\时,它有效。

  str = "$12$ \\-\\ $25$";  
    System.out.println(str.replaceAll("\\$", ""));  //1 : 12 \-\ 25    (i get how this works)

    System.out.println(str.replaceAll("^\\$", "")); //2 : 12$ \-\ $25$ (i get how this works)

    System.out.println(str.replaceAll("\\$$", str)); //error 3 want to print : $12$ \-\ $25

    System.out.println(str.replaceAll("\\\", "")); // error 4 want to print : $12$ - $25$

2 个答案:

答案 0 :(得分:1)

关于案例4,您实际上需要另一个 \

System.out.println(str.replaceAll("\\\\", "")); // error 4 want to print : $12$ - $25$

原因是java将\视为特殊字符,因此需要\\才能在字符串中获得单个\。但是,正则表达式使用\作为特殊字符,需要\\来检查单个\,因此要求您将其转义两次。

答案 1 :(得分:1)

案例3的问题似乎是替换字符串(第二个参数):它应该是一个空字符串。以下代码打印预期答案$12$ \-\ $25

public class HelloWorld{
     public static void main(String []args){
        String str = "$12$ \\-\\ $25$";
        System.out.println(str.replaceAll("\\$$", "")); 
    }
}

案例4在@Oblivion Creations的答案中解决:你错过了一个\。以下代码打印预期答案$12$ - $25$

public class HelloWorld{
     public static void main(String []args){
        String str = "$12$ \\-\\ $25$";
        System.out.println(str.replaceAll("\\\\", "")); 
    }
}