使用perl,我无法执行简单搜索以查看一个号码是否在另一个号码内。以下示例不输入if语句。
my $a = "12345";
my $b = "123456789";
if($a=~ m/$b/g) #doesn't work
{
print "success";
}
以下内容也无效。
my $a = "12345";
my $b = "123456789";
if($a =~ /$b/) #doesn't work
{
print "success";
}
答案 0 :(得分:3)
要检查$substr
是否在$string
,您需要:
if ($string =~ /\Q$substr\E/)
或
if (index($string, $substr) >= 0)
在您的情况下,这意味着
if ($b =~ /\Q$a\E/)
或
if (index($b, $a) >= 0)
\Q..\E
导致两者之间的变量内容按字面匹配,而不是将其视为正则表达式模式。
if (//g)
毫无意义,使用它会产生微妙而非常奇怪的问题。
答案 1 :(得分:0)
有些字符在正则表达式中可能有不同的含义。相反,这样做:
if (index($b, $a) != -1) #works
答案 2 :(得分:0)
我相信你可能会在声明中混淆你的变量。 $ a = ~m / $ b / g表示可以在$ a中找到$ b(为了成为真),而不是在$ b中可以找到$ a。由于$ a的长度小于$ b,因此语句失败(因为在12345中找不到123456789)。
我怀疑你想要的是:
if ( $b =~ m/$a/g ) # or ( $b =~ /$a/ )
{
print "success";
}