Regex 无法使用Perl在另一个变量中搜索一个变量
使用perl,我无法执行简单的搜索来查看一个数字是否在另一个数字中。下面的示例没有输入if语句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"; } 在正则表
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
转换为模式。