【问题标题】:what is the equivalent for (?s) y (?m) en powergrep?(?s) y (?m) en powergrep 的等价物是什么?
【发布时间】:2014-05-31 04:34:48
【问题描述】:

使用powergrep时,有一个选项叫做:文件分段,前3个选项是:

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

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

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

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

【问题讨论】:

  • tag perl 的相关性如何

标签: regex powergrep


【解决方案1】:

我不知道 powergrep,但听起来他们控制的是你匹配的内容。

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

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

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

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

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

【讨论】:

  • 感谢您的更正和回答。现在更清楚了。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-06-12
    • 2011-12-18
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2014-05-08
    • 2014-06-12
    相关资源
    最近更新 更多