使用我通常的 'X' 用法是:质朴的 'X' 在Perl
print("#" x 78, "\n");
哪个地连接了字符串78倍 “#”。但最近我遇到了这个代码:
while (<>) { print if m{^a}x }
它打印输入的每一行开头的“A”。我理解正则表达式匹配部分(m {^ a}),但我真的不明白'x'在这里做什么。
任何解释将不胜感激。
使用我通常的 'X' 用法是:质朴的 'X' 在Perl
print("#" x 78, "\n");
哪个地连接了字符串78倍 “#”。但最近我遇到了这个代码:
while (<>) { print if m{^a}x }
它打印输入的每一行开头的“A”。我理解正则表达式匹配部分(m {^ a}),但我真的不明白'x'在这里做什么。
任何解释将不胜感激。
这是修饰符的正则表达式。 x
修饰符告诉perl忽略正则表达式中的空格和注释。
在你的示例代码中,它没有区别,因为在正则表达式中没有空格或注释。
在这个用例中,'x'是一个正则表达式修饰符,它“通过允许空格和注释扩展您的模式的易读性”。根据perl文档。但在这里看起来多余
不是“冗余”,而是“不必要”。 – 2010-06-30 14:32:25
@clintp:多余(意思是'不必要')和不必要的区别是什么? – 2010-06-30 14:37:41
'冗余'并不仅仅意味着'不必要'。这意味着'不必要的,因为别的东西可以达到同样的目的'。在这种情况下,没有任何其他信息告诉正则表达式忽略空白/评论。没有任何空白/评论,所以没有必要忽略它们。 – pkaeding 2010-06-30 14:42:33
第一种情况下的“x”是一个重复操作符,它将字符串作为左侧参数,并将重复次数作为正确参数。 Perl6可以使用“xx”重复操作符复制列表。
第二个示例使用正则表达式m{^a}x
。虽然您可能会使用许多不同类型的分隔符,但新手可能会喜欢使用熟悉的符号,该符号使用正斜杠:m/^a/x
正则表达式中的“x”被称为修饰符或标志,可能使用的可选标志。它用于忽略正则表达式模式中的空白,但它也允许使用正常的注释。由于正则表达式模式可能会变得非常漫长和令人困惑,因此使用空格和注释非常有帮助。
你的例子非常短(如果该行的第一个字母是以“a”开头的话),所以你可能不需要空格或注释,但是如果你想的话可以。
例子:
m/^a # first letter is an 'a'
# <-- you can put more regex on this line because whitespace is ignored
# <-- and more here if you want
/x
感谢vol7ron,我不知道你可以用正则表达式 – 2010-07-04 17:31:14
谢谢各位的明确的解释。 – 2010-06-30 14:36:33
值得一提的是,你可以通过'perldoc perlre'获得这个信息。它甚至在第一页上! – leander 2010-06-30 16:16:01