\\ S或\\ s正则表达式将TAB字符匹配为单个空格而不是4个空格

时间:2015-11-04 16:29:18

标签: java regex tabs pattern-matching

String s[] = {"\\s","\\S"};
for (int i=0;i<s.length;i++)
{
    System.out.println(""); 
    Pattern p2 = Pattern.compile(s[i]);
    String tobeMatched = "sabc" + "\t" + "\t"+"abc dfg";
    Matcher m2 = p2.matcher(tobeMatched);
    System.out.println("expression:" + m2.pattern());
    System.out.println(tobeMatched);
    System.out.println("012345678901234567890123456789");

    System.out.print("Position found:");
    while (m2.find())
    {
        System.out.print(m2.start()); System.out.print(" ");
    }

}

如果你看到下面的输出 - 当你打印tobeSearched字符串时,TAB字符占用4个空格,但matcher.find()只返回1个空格用于TAB,第二个TAB返回到位置5.我期待包括TAB在内的空格由matcher.start()在4,8和9位找到。

有人可以在这里解释matcher.find()和matcher.start()在TAB字符中使用的逻辑。

输出

expression:\s
sabc        abc dfg
012345678901234567890123456789
Position found:4 5 9
expression:\S
sabc        abc dfg
012345678901234567890123456789
Position found:0 1 2 3 6 7 8 10 11 12

1 个答案:

答案 0 :(得分:3)

我觉得你误会了。 \ s不代表“空间”,而是代表“空白”字符。

空格和制表符都是一个空白字符。 在ASCII中,空格具有charcode 0x20,tab具有0x0b。