使用=〜运算符进行字符串比较
我有两个数组@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。
答案 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