perl regex:所有必须存在



我在写一个世界助理。是否存在一个正则表达式格式,只有当所有这些字母以任何顺序出现时才说"匹配"?字符类语法[abc]是一个OR操作;我在找等价的AND

例如"蔓越莓";将匹配/{abc}/,但缺少'b'的"cranny"将不匹配。

我知道$word =~ /^(?=.*a)(?=.*b)(?=.*c)/的答案,也知道$_= $word; /a/ && /b/ && /c/的答案,但我想知道是否有更优雅的答案。

[abc]表示字符必须是abc

[1] 要匹配一个字符是abc,您可以使用(?[ ... ]).
(?[ [a] & [b] & [c] ])

当然,你不需要AND。你想要

(?: a.*b.*c
|   a.*c.*b
|   b.*a.*c
|   b.*c.*a
|   c.*a.*b
|   c.*b.*a
)

所以/a/ && /b/ && /c/相当一个优雅的解决方案。


  1. 这是一个实验性的功能,但我预测它将被接受而不做任何改变。

如果您希望abc按任何顺序排列,您可以:

$matches = ($word =~ /a/ && $word =~ /b/ && $word =~ /c/);

相关内容

最新更新