0

有没有办法从“许多'|'中获得多匹配模式 正则表达式”匹配。

这是我的代码,

#! /usr/bin/perl
@matches = qw(google intel hp qualcomm app);

$keyword = join('|', @matches);

$string = "hello google app";

@founded = ($string =~ /($keyword)/);

print "Founded keyword is:" . join(" ", @founded);

我希望得到'google and app',因为这个关键字都在字符串中匹配。但是多么可悲,只是得到“谷歌”

4

2 回答 2

2

我认为您正在寻找两个列表的交集:

use Array::Utils qw(:all);

my @matches = qw(google intel hp qualcomm app);
my @find = qw(hello google app);

my @result = intersect(@matches, @find);
print "Founded keyword(s): ", join(" ", @result) . "\n";

此解决方案使用Array::Utils模块

于 2013-03-10T08:28:14.630 回答
2

只需在匹配中添加一个/g修饰符:

@found = ($string =~ /($keyword)/g);

你会这样得到所有的比赛。

于 2013-03-10T08:24:25.587 回答