/x 修饰符能够在模式里随意加上空白,其目的是使它更容易阅读和理解。
考虑下面代码:
[Perl] 纯文本查看 复制代码 #!/usr/bin/perl
$_ = "-&1234#9032";
if (/^-?&\d+\.?\d*/) {
print "matched\n";
}else {
print "not matched\n";
}
if (/^-?& \d+ \.? \d* /) {
print "matched\n";
}else {
print "not matched\n";
}
运行输出:./x.pl
matched
not matched 程序中的第 2 个 if 的匹配模式里,各个匹配元素分别用空格或制表符隔开,这时就无法匹配。但是如果在 /^-?& \d+ \.? \d* / 改为 /^-?& \d+ \.? \d* /x 后,那么就能和第 1 个 if 的情况一样产生匹配。这是因为 /x 表示允许在匹配模式里插入任意空白,这样便使得这些空白失去了原来的空白的意义,在此仅仅是为了阅读的便利。
时机上,对于匹配空白,我们往往不会直接敲一个空格键或者一个制表符,而是使用 \s 或 \*,\+ 之类的表达方式。 |