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。
解决方案
听起来您需要调整匹配以_
在匹配的字符串之后需要。
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
例如*
匹配字面意思,并且_
使得它需要_
紧跟在字符串中的a $pattern
。
如果您有许多字符串和/或模式,最好在 _ 之前找到每个字符串的部分并使用哈希查找:
my @strings = ( 'abc99_xyz', 'abc9_xxx');
my %patterns = ( 'abc99' => 1, 'abc9' => 1 );
for my $string (@strings) {
if ( $string =~ /^([^_]+)/ && $patterns{$1} ) {
print "$string == $1\n";
}
}
推荐阅读
- javascript - graphql解析器返回无法从nodejs中的异步函数为不可为空的字段返回null
- jquery - 与多个一起使用时,Select2 不呈现占位符标记
- c# - Parallel.ForEach 中的 C# List.Find() 有时返回 NULL
- php - 通过 artisan 命令调用时请求参数丢失
- html - 如何在角度应用程序中测试可重用的组件元素?
- c - 如何从整数中提取数字并将它们存储在不同的变量中?
- reactjs - ReactJS 中的循环组件
- varnish - 如何设置清漆后端连接空闲超时?
- sql - 如何编写 SQL 以使用 group by 函数从多行中提取最新的非空数据?
- php - 表格未显示动态值