我有以下perl模式匹配条件
(?:\s+\w+){2}
何时应用于Linux目录列表
-rw-rw-r-- 1 root root 36547 2011-03-18 18:41 abc.txt
匹配root root
?:
在这做什么?
答案 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";
}