-2

我正在寻找解释以下语法的帮助。我检查了我的 Perl 书,并在网上查了一下。

我正在寻找以下内容:

$option =~ s/\s+//g
$option =~ m/^\s*$

非常感谢。

4

2 回答 2

5

s并且m是将正则表达式应用于字符串的运算符。s///是替换运算符并且m//是匹配运算符。他们都将正则表达式作为他们的第一个论点(在 内//)。=~告诉 Perl 使用/匹配正则表达式与$option. 有关perlre详细信息,请参阅。

以下是这些正则表达式的作用:

use warnings;
use strict;
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new( qr/\s+/ )->explain;

The regular expression:

(?-imsx:\s+)
matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  \s+                      whitespace (\n, \r, \t, \f, and " ") (1 or
                           more times (matching the most amount
                           possible))
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

简而言之:它将具有多个空白字符的每个实例替换为空。

和:

print YAPE::Regex::Explain->new( qr/^\s*$/ )->explain;

正则表达式:

(?-imsx:^\s*$)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
----------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

如果字符串仅包含空格字符,则匹配。尽可能多,但至少为零,仅此而已。

于 2012-06-25T17:47:44.127 回答
3

嗯,第一个表达式是一个s(替换),它查找一个或多个空格并消除它们。指定+一个或多个空格 ( \s) 字符。

第二个看起来m(匹配)一个空行。锚点 tje 匹配到行的^开头和$结尾。因此,只有包含零个或多个(即*)空格的行才能成功匹配。

两个表达式都对$option变量进行操作,因为=~将它们绑定到它。

于 2012-06-25T17:47:53.600 回答