有没有办法在Perl正则表达式中创建''mean \ s *?

时间:2013-10-01 20:41:59

标签: regex perl

这将极大地提高我编写的许多正则表达式的可读性,当我在正则表达式中编写单个文字空间时,我几乎总是意味着\s*。那么,Perl正则表达式中是否有“模式”可以启用此功能,例如/s使.匹配换行符等等?通过perlre粗略阅读没有给出任何东西,但也许我错过了一些东西或者可能有不同的方法来实现这一目标?

编辑:我的意思是,目前我写的是qr/^\s*var\s+items\s*=\s*[\s*$/,而我更愿意写qr/^ var\s+items = [ $/并使用某些方法表示同样的事情 - 我的问题是这样的意味着存在。

2 个答案:

答案 0 :(得分:6)

不,没有这样的功能。但是/x模式可以防止文字空间完全匹配任何内容,因此您可以直观地构建正则表达式。

qr/\A\s* var \s* items \s*=\s* \[ \s*\z/x

(字符类除外 - [ ]再次匹配空格。)

答案 1 :(得分:6)

以下是使用重载(http://perldoc.perl.org/perlre.html#Creating-Custom-RE-Engines)进行特定替换的示例。

myre.pm

package myre;
use overload;

sub import {
    overload::constant 'qr' => \&spacer;
}

sub spacer {
     my $re = shift;
     $re =~ s/ /qr{\s*}/ge;
     return $re;
}
1;

example.pl

use myre;
print "ok" if "this is\n\n a   test" =~ /this is a test/;