使用=〜运算符进行字符串比较

时间:2019-09-02 18:13:16

标签: perl

使用=〜运算符进行字符串比较

我有两个数组@a包含abc99_xyz,abc9_xxx和@b包含abc99,abc9作为字符串,并且我只想将数组@a的abc99_xyz与@b的abc99匹配,但是当abc9也与@a的abc99_xyz匹配时我正在使用〜=运算符。

代码如下:

@a=qw(abc99_xyz abc9_xxx);
@b=qw(abc99 abc9);

foreach $k(@a)
        {

        foreach $h(@b)
        {
        if($k =~ $h)
        {
        print" $k == $h\n";
        }
     }
 }

只有abc99_xyz应该与abc99匹配,而不是abc9。

1 个答案:

答案 0 :(得分:5)

听起来像您需要调整匹配以在匹配的字符串后要求_

my @strings = ( 'abc99_xyz', 'abc9_xxx');
my @patterns = ( 'abc99', 'abc9' );
for my $string (@strings) {
    for my $pattern (@patterns) {
        if ( $string =~ /^\Q$pattern\E_/ ) {
            print "$string == $pattern\n";
        }
    }
}

在比赛中,^表示模式必须在字符串的开头匹配,\Q / \E$pattern中使用任何特殊字符,例如{ {1}}字面匹配,并且*要求在_之后紧跟字符串中的_

如果您有很多字符串和/或模式,最好在_之前找到每个字符串的一部分并使用哈希查找:

$pattern