0

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

  • 不要分段文件。
  • 逐行
  • 逐行包括换行符

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

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

请问有人可以解释这些选项吗?以及与 s 和 m 修饰符的关系。

4

2 回答 2

1

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

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

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

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

于 2014-04-16T10:48:31.457 回答
1

我不知道powergrep,但这听起来像是他们控制的那些你正在匹配的东西。

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

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

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

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

毫无疑问,“点匹配新行”等同于s修饰符。

于 2014-04-16T13:57:03.243 回答