你的代码让我很困惑,可能你也是。
这个
my $page = "\/Home"; #should 'match'
#or
$page = "\/New Homes"; #should 'no match'
相当于
my $page = '/New Homes';
因为不需要在文字字符串中转义斜杠,也不需要使用双引号,除非您需要插值变量。
还有这个
if ($page =~ /Home | Home/) {
print "no match A";
} else {
print "match A";
}
匹配时正在打印no match A
,反之亦然,因此您的输出与.no match A
' Home'
$page
您担心的情况
if ($page =~ /(?<= )Home(?= )/) {
print "no match B";
} else {
print "match B";
}
有同样的问题,它no match B
在匹配时打印。它正在寻找Home
, 前面和后面的空格。$page
包含前面'/New Homes'
有'Home'
空格,但后面没有空格。所以它说match B
因为没有匹配。
试试你的程序的这个变体,纠正 and 的感觉match
并no match
添加use strict
and use warnings
。
use strict;
use warnings;
my $page = '/New Homes';
if ($page =~ /Home | Home/) {
print 'match A';
}
else {
print 'no match A';
}
print "\n\n";
if ($page =~ /(?<= )Home(?= )/) {
print 'match B';
}
else {
print 'no match B';
}
输出
match A
no match B