这将极大地提高我编写的许多正则表达式的可读性,当我在正则表达式中编写单个文字空间时,我几乎总是意味着\s*
。那么,Perl正则表达式中是否有“模式”可以启用此功能,例如/s
使.
匹配换行符等等?通过perlre
粗略阅读没有给出任何东西,但也许我错过了一些东西或者可能有不同的方法来实现这一目标?
编辑:我的意思是,目前我写的是qr/^\s*var\s+items\s*=\s*[\s*$/
,而我更愿意写qr/^ var\s+items = [ $/
并使用某些方法表示同样的事情 - 我的问题是这样的意味着存在。
答案 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/;