あなたのコードは私を混乱させ、おそらくあなたも混乱させます。
これ
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
match
と の意味を修正し、とno match
を追加use strict
して、プログラムのこの変形を試してください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