是否可以使用正则表达式来匹配仅包含来自集合列表中的单词的字符串

时间:2015-03-02 10:47:10

标签: regex

我想匹配仅包含集合列表中的单词的字符串。

如果我有字符串“测试某些东西”我想使用“测试随机单词列表”来匹配该字符串,但如果我使用“随机测试”则不匹配字符串。

示例: -

“蓝绿色”必须使用以下列表“绿黄蓝”

进行匹配

“蓝绿色”不能使用以下列表“绿黄紫”

进行匹配

“五七”必须使用以下列表“二七六五”匹配

“五七”不得使用以下列表“二六五”

进行匹配

我尝试使用正则表达式前瞻,但正则表达式只匹配包含列表中所有单词的字符串。那个正则表达式是: -

^(?=.*\btesting\b)(?=.*\brandom\b)(?=.*\bsomething\b).+

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您将希望整个字符串与一系列项目匹配,其中每个项目必须是该组中的单词。要匹配仅包含来自集合{testing,random,something}的单词的字符串,相应的(Perl-like)正则表达式将是

/^((testing|random|something)\b\s*)*$/

也就是说,整个字符串必须匹配允许的单词的零个或多个序列,后跟一个单词边界,可能还有一些空格。

演示perl脚本:

my @words=qw/only words from this list/;

my $pattern='^(('.join('|',@words).')\b\s*)*$';
print /$pattern/?"ok\n":"fail\n" while <>;

演示输出:

$ perl wlregex.pl << _eod
> words list only
> words banana only
> _eod
ok
fail