perl只与数组列表匹配整个单词

时间:2014-10-28 15:39:01

标签: string perl match

我需要能够将用户与用户列表进行匹配,但只能匹配完全匹配。 在下面的示例代码中:
- 如果strUser包含" info"有一场比赛,这很好 - 如果strUser包含" theinfo"或" infostuff"有一场比赛,这不好 我不能使用\ b修饰符,因为变量只包含用户名,没有空格或单词边界。

#!/usr/bin/perl
$strUser = "theinfo";
$strUsers = "(alpha|info|omega)";
if ( $strUser =~ /$strUsers/ ) {
 print "match\n";
}
exit(0);

1 个答案:

答案 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