为什么在这个regexp中要匹配空行?

为什么在这个regexp中要匹配空行?,regex,perl,Regex,Perl,G'day 我使用以下Perl片段从Solaris集群命令中提取输出 open(CL,"$clrg status |"); my @clrg= grep /^[[:lower:][:space:]]+/,<CL>; close(CL); open(CL,“$clrgstatus |”); my@clrg=grep/^[:lower:[:space:][]+/,; 关闭(CL); 当我打印数组@clrg BTW“=>”和“的元素内容时,我得到了以下结果,这是因为[:space://

G'day

我使用以下Perl片段从Solaris集群命令中提取输出

open(CL,"$clrg status |");
my @clrg= grep /^[[:lower:][:space:]]+/,<CL>;
close(CL);
open(CL,“$clrgstatus |”);
my@clrg=grep/^[:lower:[:space:][]+/,;
关闭(CL);

当我打印数组@clrg BTW“=>”和“的元素内容时,我得到了以下结果,这是因为
[:space://code>匹配换行符和回车符

所以
[[:space:]+
将匹配
\n
\r\n
\n\n

但是
[[:space:]{3,}
需要三个字符,空行就是
\n

{1,}
+
的意思相同:将前面的组匹配一次或多次


另外,一个典型的换行符是Unix上的
\n
和Windows上的
\r\n

这是因为
[:space::
也匹配换行符和回车符

所以
[[:space:]+
将匹配
\n
\r\n
\n\n

但是
[[:space:]{3,}
需要三个字符,空行就是
\n

{1,}
+
的意思相同:将前面的组匹配一次或多次

另外,一个典型的换行符是Unix上的
\n
和Windows上的
\r\n

Hm。根据,字符类不应该包括换行符,因为它应该与
\S
等效(除了它识别一个额外的字符,垂直制表符,以保持POSIX的一致性)

然而,刚刚在5.10.0上测试过,我可以验证它是否也匹配换行符。无论这是Perl中的一个bug还是文档中的一个bug,我都会留给Perl维护人员。但是为了避免直接的问题,请使用前面回答者的解决方案,只使用
\s
而不是POSIX类。

Hm对于,字符类不应包括换行符,因为它应该与
\s
等效(除了它识别一个额外的字符垂直选项卡以保持POSIX的一致性)


但是,刚刚在5.10.0上测试过,我可以验证它是否也匹配换行符。无论这是Perl中的错误还是文档中的错误,我都将留给Perl维护人员。但是为了避免眼前的问题,请使用前面回答者的解决方案,只使用
\s
而不是POSIX类。

@Andomar,这些POSIX字符类不能单独使用;它们必须在另一对方括号内使用,即[[:space:].@Andomar,那些POSIX字符类不能单独使用;它们必须在另一对方括号内使用,即[[:space:].\s确实应该匹配换行符和回车符,这也是正确的[:space:]。可能您正在考虑[:blank:],它只匹配空格和制表符。\s代表“空白字符”。在所有正则表达式中,它都包括[\t\r\n]。我的错--我混淆了“空白字符”这一事实。“在正则表达式中,只有当/s标志出现时,才会匹配换行符。没有错误;\s确实应该匹配换行符和回车符,[:space:]也是如此。也许您想的是[:blank:],它只匹配空格和制表符。\s代表“空白字符”。在所有正则表达式中,它都包括[\t\r\n].我的错--我混淆了一个事实,即正则表达式中的“.”只在出现/s标志时匹配换行符。
=><=
=>nas-rg             mcs0.cwwtf.bbc.co.uk   No          Online<=
=>                   mcs1.cwwtf.bbc.co.uk   No          Offline<=
=><=
=>apache-rg          mcs0.cwwtf.bbc.co.uk   No          Online<=
=>                   mcs1.cwwtf.bbc.co.uk   No          Offline<=
=><=
open(CL,"$clrg status |");
my @clrg= grep /^[[:lower:][:space:]]{3,}/,<CL>;
close(CL);
=>nas-rg             mcs0.cwwtf.bbc.co.uk   No          Online<=
=>                   mcs1.cwwtf.bbc.co.uk   No          Offline<=
=>apache-rg          mcs0.cwwtf.bbc.co.uk   No          Online<=
=>                   mcs1.cwwtf.bbc.co.uk   No          Offline<=