0

我有这样的文本(1 或 0 个制表符 + 行开头的多个空格):

(tab)   There are a tab and 4 whitespaces before me.    // line 1
(tab)     There are a tab and 6 whitespaces before me.  // line 2
       There are 6 whitespaces before me.               // line 3
   There are 4 whitespaces before me.                   // line 4   

当我使用^[\t\s]\s*时,只有第 1,2 行匹配,第 3、4 行不匹配,为什么?

(当我使用^\s*时,可以匹配第 3 行和第 4 行。)

谢谢!

4

3 回答 3

2

事实证明,您不能\s使用[]. 只需[].

于 2012-08-20T15:22:05.190 回答
1

这太有趣了。我不确定为什么在括号内\s不起作用。[]也许是因为[]定义了明确的字符并且\s是模棱两可的(它可以代表多个字符)。换句话说\s,代表任何空白,包括制表符( \t)。但是,如果您在这种情况下明确指定一个空格 ( ^[\t ]\s*),它将起作用。

于 2012-08-20T15:21:32.913 回答
0

如前所述\s,在 内不起作用[],或者您可以使用[:blank:]字符类:

^[[:blank:]]\+
于 2012-08-20T18:15:34.470 回答