我想匹配仅包含集合列表中的单词的字符串。
如果我有字符串“测试某些东西”我想使用“测试随机单词列表”来匹配该字符串,但如果我使用“随机测试”则不匹配字符串。
示例: -
“蓝绿色”必须使用以下列表“绿黄蓝”
进行匹配“蓝绿色”不能使用以下列表“绿黄紫”
进行匹配“五七”必须使用以下列表“二七六五”匹配
“五七”不得使用以下列表“二六五”
进行匹配我尝试使用正则表达式前瞻,但正则表达式只匹配包含列表中所有单词的字符串。那个正则表达式是: -
^(?=.*\btesting\b)(?=.*\brandom\b)(?=.*\bsomething\b).+
提前谢谢。
答案 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