如何比较存储在Perl变量中的两个字符串?

时间:2017-09-19 12:02:44

标签: regex string perl

我想检查$ test2和$ test3中是否存在$ test1。

我尝试使用以下代码,但我没有得到正确的输出。

my $test1 = "cat";
my $test2 = "My name is cat";
my $test3 = "My name is apple";

if($test2  eq /$test1/){
    print "yes2\n";
}

if($test3 eq /$test1/){
   print "yes3\n";
}

3 个答案:

答案 0 :(得分:2)

匹配正则表达式使用=~运算符:

if($test2  =~ /$test1/){
    print "yes2\n";
}

if($test3 =~ /$test1/){
   print "yes3\n";
}

您可以使用字边界完全匹配,以避免匹配caterpillar

if($test2  =~ /\b$test1\b/){
    print "yes2\n";
}

if($test3 =~ /\b$test1\b/){
   print "yes3\n";
}

答案 1 :(得分:1)

这是另一种方法,不直接使用if

$result = ($test2  =~ /\b$test1\b/) ? "Matched" : "No Match";
print "$result\n";

答案 2 :(得分:0)

检查另一个字符串中包含的字符串的最简单方法是使用正则表达式:

print "Found." if ( $test2 ~= /$test1/);

在你的情况下,你甚至会更简洁:

foreach $str in ( $test1, $test2 ) {
   print "Found $test1 in $str." if ( $str ~= /$test1/);
}

甚至,使用默认的assignemnt:

foreach ( $test1, $test2 ) {
   print "Found $test1 in $str." if ( /$test1/ );
}

测试是针对$_进行检查,tf.add_to_collection由foreach子句自动分配。