Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 无法使用Perl在另一个变量中搜索一个变量_Regex_Perl - Fatal编程技术网

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

Regex 无法使用Perl在另一个变量中搜索一个变量,regex,perl,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"; } 在正则表

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

在正则表达式中,有些字符可能具有不同的含义。相反,请执行以下操作:

if (index($b, $a) != -1) #works

在正则表达式中,有些字符可能具有不同的含义。相反,请执行以下操作:

if (index($b, $a) != -1) #works

我相信你可能在陈述中混淆了你的变量。$a=~m/$b/g表示可以在$a中找到$b(为了正确),而不是在$b中找到$a。因为$a的长度小于$b,所以语句失败(因为12345中找不到123456789)

我想你想要的是:

if ( $b =~ m/$a/g )  # or ( $b =~ /$a/ )
{
  print "success";
} 

我相信你可能在陈述中混淆了你的变量。$a=~m/$b/g表示可以在$a中找到$b(为了正确),而不是在$b中找到$a。因为$a的长度小于$b,所以语句失败(因为12345中找不到123456789)

我想你想要的是:

if ( $b =~ m/$a/g )  # or ( $b =~ /$a/ )
{
  print "success";
} 

要检查
$substr
是否在
$string
中,您需要:

if ($string =~ /\Q$substr\E/)

对你来说,这意味着

if ($b =~ /\Q$a\E/)


\Q..\E
导致变量之间的内容按字面匹配,而不是将其视为正则表达式模式


如果(//g)
没有意义,使用它会产生微妙而非常奇怪的问题。

要检查
$substr
是否在
$string
中,您需要:

if ($string =~ /\Q$substr\E/)

对你来说,这意味着

if ($b =~ /\Q$a\E/)


\Q..\E
导致变量之间的内容按字面匹配,而不是将其视为正则表达式模式


如果(//g)
没有意义,使用它会产生微妙而非常奇怪的问题。

如果您想检查
$a
是否在
$b
中,请使用
$b=~m/$a/
g
标志不需要)这有点不直观,但它起作用了……谢谢!我改为使用索引搜索。这很难是非直觉的。。。假设您没有使用变量,它将是
$b=~m/12345/
。。。对于搜索和替换,它是
$b=~s/12345/abc/
。。因此,外卖是
变量=~
要匹配或搜索并替换该变量,请避免使用特殊变量
$a
$b
。或者通常只使用单个字母的变量名。如果要检查
$a
是否在
$b
中,请使用
$b=~m/$a/
g
不需要标记)这有点不直观,但它起作用了……谢谢!我改为使用索引搜索。这很难是非直觉的。。。假设您没有使用变量,它将是
$b=~m/12345/
。。。对于搜索和替换,它是
$b=~s/12345/abc/
。。因此,外卖是
变量=~
要匹配或搜索并替换该变量,请避免使用特殊的变量
$a
$b
。或者通常只使用单个字母的变量名。
if(//g)
没有意义,并且您没有使用
quotemeta
if(//g)将
$a
转换为模式毫无意义,而且您没有使用
quotemeta
$a
转换为模式。