使用powergrep时,有一个名为:file sectioning的选项,前3个选项是:
我猜第一个选项类似于Perl' m'修饰符(" ^"匹配字符串的开头和每个换行符之后;" $"在每个换行符之前和字符串末尾匹配)和选项 Dot匹配新行,就像Perl' s'使用了修饰符("。"匹配所有字符而不是排除换行符。)
我不明白以下两个选项。 逐行仍然可以打开复选框点匹配新行。并且逐行包括换行符将再次成为(?s)修饰符,因此我不理解这些选项。
有人可以解释一下这些选择吗?以及与s和m修饰符的关系。
答案 0 :(得分:1)
要打开一个正则表达式的点匹配换行符,请将(?s)放在它前面。
(?n)或-line启用Tcl称为“换行敏感匹配”的内容。点和否定字符类将不匹配换行符。插入符号和美元将在换行符之前和之后匹配。指定(?n)或-line与指定(?pw)或-linestop -lineanchor相同。
(?m)是(?n)的历史同义词。
答案 1 :(得分:1)
我不知道powergrep,但听起来就像是他们控制着你匹配的东西。
“不要分节文件”与整个文件匹配。
my $file = do { local $/; <$fh> };
$file =~ /.../;
“逐行包括换行符”与每一行匹配。
while (my $line = <$fh>) {
$line =~ /.../;
}
“逐行”匹配每一行,扼杀。
while (<$fh>) {
chomp( my $chomped_line = $_ );
$chomped_line =~ /.../;
}
毫无疑问,“Dot匹配新行”相当于s
修饰符。