xiaochun023 2010-02-05 15:17 采纳率: 0%
浏览 243
已采纳

java 中的正则什么时候用斜线,用多少斜线

最近小弟在用JAVA正则做一些数据采集,其中遇到一些不明之事,最让我费解的是正则表达式中的斜线问题
有如:

private static String zz="([\\s\\S]*?)"; //为什么要用四个斜线?

zurl_rule = zurl_rule.replaceAll("\[]", zz); //为什么要用又斜线

  • 写回答

2条回答 默认 最新

  • iteye_13500 2010-02-05 16:13
    关注

    http://tech.ddvip.com/2009-03/1238072554112363.html

    1. 字符串里面表示斜杠就需要两个斜杠如“\”

    2. 4个斜杠在正则表达式里面表示一个斜杠

    其实我也比较难理解,和实现有关,需要看jdk源码,可以通过一些测试来搞清含义:

    看下面代码
    [code="java"]import java.util.regex.*;

    public class RETest {
    public static void main(String[] args) {
    System.out.println("Test 1");
    String zurl_rule = "=[]=";
    String bb = "cc";
    System.out.println(zurl_rule.replaceAll("\[]", bb));

        System.out.println("Test 2");
        String zz = "^([\\\\s\\\\S])$";
        Pattern p = Pattern.compile(zz);
    
        String str = "S";
        Matcher m = p.matcher(str);
        System.out.println(m.find());
    
        str = "s";
        m = p.matcher(str);
        System.out.println(m.find());
    
        str = "\\";
        m = p.matcher(str);
        System.out.println(m.find());
    
        str = "\\\\";
        m = p.matcher(str);
        System.out.println(m.find());
    }
    

    }[/code]

    运行结果:
    [code="java"]Test 1
    =cc=
    Test 2
    true
    true
    true
    false[/code]

    对Test 1:
    zurl_rule.replaceAll("\[]", bb);
    目地是想对[]进行替换,但是直接使用"[]"通不过编译,需要在[前面加上两个\。

    对Test 2:
    对于模式"^([\\s\\S])$" (注意我去掉了上面后面的*?,加上了^和$),
    这个模式就是匹配一个字符,分别可以匹配一个\,s和S。由于字符串里面实际的一个斜杠,所以str = "\";来匹配为true。

    其实"^([\\s\\S])$"是可以写成"^([s\\S])$"的,两次四个斜杠重复了,方括号里写一次就行了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?