0

如果它以它开头,我想匹配它。例如,这里的 'is' 将通过 if 条件,因为 'is' 是 'this' 的一部分。我不想要那个。我希望只有当有一个“是”字时,它才会通过。

#!/usr/bin/perl

$mysub= "is";
$str="this  good morning";

if($str=~ /$mysub/){
    print ("Here");
}
else
{
   print ("Not in it");
}
4

3 回答 3

4

使用“^”匹配行运算符的开头。

#!/usr/bin/perl

$mysub= "is";
$str="this  good morning";

if($str=~ /^$mysub/){
    print ("Here");
}
else
{
   print ("Not in it");
}
于 2013-07-28T14:34:30.850 回答
4

asantaballa给出了一个很好的答案,因为在这种情况下可以使用线锚的开头来避免匹配this。但是,如果要在字符串内部进行匹配,例如:

my $str = "don't match this";

然后你不能使用circumflex ^,但你可以使用单词边界:

if ($str =~ /\bis\b/) {

单词边界将按照它所说的进行,匹配单词边界,并确保您没有部分匹配。

此外,你不应该在没有这两个 pragma 的情况下编写代码:

use strict;
use warnings;

为什么?因为它会伤害你的学习,让调试更难,让你的生活更痛苦。

于 2013-07-28T14:41:08.200 回答
-1
#!/usr/bin/perl
use strict;
use diagnostics;

my $mysub= "is";
my $str="this  good morning";

if($str=~ /\W+$mysub\W+/){
    print ("Here");
}
else
{
   print ("Not in it");
}

添加了诊断以获取有关您的代码的问题信息,该信息报告缺少 $mysuf 和 $str 的声明。

也使用 \W+ 作为分隔符,它们匹配任何非 \w。

于 2013-07-28T17:57:05.930 回答