perl 正则表达式:所有内容都必须存在

perl regex: All must be present

我在写wordle小助手。是否有正则表达式格式表示“仅当所有这些字母以任何顺序存在时才匹配”?字符class语法[abc]是OR运算;我正在寻找等效的 AND。

例如,“cranberry”会匹配 /{abc}/,但缺少 'b' 的“cranny”则不会。

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

[abc]表示字符必须是abc.

要匹配 abc 的字符,您可以使用 (?[ ... ]).[1]

(?[ [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. 这是一项实验性功能,但我预计它会被接受而无需更改。

如果您想要 ab 以及 c 的任意顺序,您可以:

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