什么是(?s)y(?m)en powergrep的等价物?

时间:2014-04-16 10:43:17

标签: regex powergrep

使用powergrep时,有一个名为:file sectioning的选项,前3个选项是:

  • 不要删节文件。
  • 逐行
  • 逐行包括换行符

我猜第一个选项类似于Perl' m'修饰符(" ^"匹配字符串的开头和每个换行符之后;" $"在每个换行符之前和字符串末尾匹配)和选项 Dot匹配新行,就像Perl' s'使用了修饰符("。"匹配所有字符而不是排除换行符。)

我不明白以下两个选项。 逐行仍然可以打开复选框点匹配新行。并且逐行包括换行符将再次成为(?s)修饰符,因此我不理解这些选项。

有人可以解释一下这些选择吗?以及与s和m修饰符的关系。

2 个答案:

答案 0 :(得分:1)

  

要打开一个正则表达式的点匹配换行符,请将(?s)放在它前面。

     

(?n)或-line启用Tcl称为“换行敏感匹配”的内容。点和否定字符类将不匹配换行符。插入符号和美元将在换行符之前和之后匹配。指定(?n)或-line与指定(?pw)或-linestop -lineanchor相同。

     

(?m)是(?n)的历史同义词。

http://www.regular-expressions.info/tcl.html

答案 1 :(得分:1)

我不知道powergrep,但听起来就像是他们控制着你匹配的东西。

  • “不要分节文件”与整个文件匹配。

    my $file = do { local $/; <$fh> };
    $file =~ /.../;
    
  • “逐行包括换行符”与每一行匹配。

    while (my $line = <$fh>) {
       $line =~ /.../;
    }
    
  • “逐行”匹配每一行,扼杀。

    while (<$fh>) {
       chomp( my $chomped_line = $_ );
       $chomped_line =~ /.../;
    }
    

毫无疑问,“Dot匹配新行”相当于s修饰符。