我需要能够将用户与用户列表进行匹配,但只能匹配完全匹配。
在下面的示例代码中:
- 如果strUser包含" info"有一场比赛,这很好
- 如果strUser包含" theinfo"或" infostuff"有一场比赛,这不好
我不能使用\ b修饰符,因为变量只包含用户名,没有空格或单词边界。
#!/usr/bin/perl
$strUser = "theinfo";
$strUsers = "(alpha|info|omega)";
if ( $strUser =~ /$strUsers/ ) {
print "match\n";
}
exit(0);
答案 0 :(得分:4)
在正则表达式^
和\z
中使用边界:
if ( $strUser =~ /^$strUsers\z/ ) {
请注意,由于您可能希望使用文字字符串,因此我会花更多精力来构建您的正则表达式,使用quotemeta
:
#!/usr/bin/perl
use strict;
use warnings;
my $strUser = "theinfo";
my @users = qw(alpha info omega);
my $list_users_re = join '|', map {quotemeta} @users;
if ( $strUser =~ /^($list_users_re)\z/ ) {
print "match\n";
}
exit(0);
然而,一个更简单的解决方案,因为你正在寻找完全匹配,只是使用哈希:
my @users = qw(alpha info omega);
my %is_user = map { $_ => 1 } @users;
if ( $is_user{$strUser} ) {
print "match\n";
}
最后,请始终在每个perl脚本中包含use strict;
和use warnings
。