Perl问号后跟冒号模式匹配

时间:2014-05-03 21:44:03

标签: regex perl

我有以下perl模式匹配条件

(?:\s+\w+){2}

何时应用于Linux目录列表

-rw-rw-r-- 1 root root       36547 2011-03-18 18:41 abc.txt

匹配root root

?:在这做什么?

1 个答案:

答案 0 :(得分:2)

Brackets捕获正则表达式中找到的字符串。 ?:将禁用当前括号的捕获。

" 1 root"匹配是因为模式匹配一​​个或多个空白字符(\s)的两次出现,后跟一个更多的单词字符(\w)。请参阅" Character Classes and other Special Escapes"。

在给出的示例中,前面有空格的第一个单词字符是" 1",后跟一些空格,再一个是一个或多个单词字符。

对于那些看不到它的人 - 尝试一下(您可以删除?:以查看匹配的组$1,它将包含root):

my $str = '-rw-rw-r-- 1 root root     36574 2011-03-18 18:41 abc.txt';
if ( $str =~ m/(\s+\w+){2}/ ) {
    print "matches\n";
    print "\$1 contains " . (defined $1 ? $1 : "nothing it's undef") . "\n";
}else{
    print "does not match\n";
}