无法使用Perl在另一个变量中搜索一个变量

时间:2016-10-12 03:09:50

标签: regex perl

使用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";
}

3 个答案:

答案 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";
}