0

我正在尝试查看 string1 是否在 perl 中的 string2 中

$Item1="I Like Coffee";
$Item2="2 I Like Coffee";
$Item3="I like Milke";

$Item1=$Item2 but $Item1!=$item3

一种方法是去掉 $item2 开头的 2,然后进行比较。如下:

$item=~s/(\d+)//;

然后我们可以比较。相反,更好的方法是在 Item2 中对 Item1 进行 grep,如果为 true,则执行其余操作。但是 grep 仅适用于列表,有没有微妙的方法可以做到这一点?谢谢!

4

2 回答 2

1
if (index(STRING,SUBSTRING) >= 0) and print "SUBSTRING in STRING\n" ;
于 2012-04-19T03:29:52.813 回答
1

安德烈的问题解决了您的部分实际问题。index会告诉你该子字符串是否存在于模式中,但他回答它的方式可能会返回相同的判断,因为两个字符串完全相等。

sub majics_match {
    my ( $look, $cand ) = @_;
    return 1 unless length( $look // '' );
    return 0 unless length( $cand // '' );
    my $pos = index( $cand, $look );
    return 0 unless $pos > 0;
    return substr( $cand, 0, $pos ) =~ m/^\d\s+/ 
        && substr( $cand, $pos + length( $look )) eq ''
        ;
}

...或者您可以使用正则表达式执行此操作:

$cand =~ m/^\d \Q$look\E$/;
于 2012-04-19T06:14:01.927 回答