我希望匹配模式,如果它从它开始。 Exa,这里'是'将通过if条件,因为'is'是'this'的一部分。我不希望这样。我想要的只有在有'是'字时才会通过。
#!/usr/bin/perl
$mysub= "is";
$str="this good morning";
if($str=~ /$mysub/){
print ("Here");
}
else
{
print ("Not in it");
}
答案 0 :(得分:4)
使用“^”匹配行操作符的开头。
#!/usr/bin/perl
$mysub= "is";
$str="this good morning";
if($str=~ /^$mysub/){
print ("Here");
}
else
{
print ("Not in it");
}
答案 1 :(得分:4)
asantaballa给出了一个很好的答案,因为行锚的开头可以用来避免在这种情况下匹配this
。但是,如果要匹配字符串内部,例如:
my $str = "don't match this";
然后你不能使用抑扬符^
,但你可以改用词边界:
if ($str =~ /\bis\b/) {
单词边界将执行它所说的内容,匹配单词边界,并确保您不会获得部分匹配。
此外,如果没有这两个pragma,你永远不应该编写代码:
use strict;
use warnings;
为什么呢?因为它会伤害你的学习,使调试更加困难,让你的生活更加痛苦。
答案 2 :(得分:-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。