regex – 如何使用smartmatch检查字符串是否与数组中的所有模式匹配?

我想检查字符串是否匹配多个正则表达式模式.我遇到了
related question,Brad Gilbert
answered使用smartmatch运算符:

my @matches = (
  qr/.*\.so$/,
  qr/.*_mdb\.v$/,
  qr/.*daidir/,
  qr/\.__solver_cache__/,
  qr/csrc/,
  qr/csrc\.vmc/,
  qr/gensimv/,
);

if( $_ ~~ @matches ){
  ...
}

如果任何模式匹配,则输入if语句,但我想检查所有模式是否匹配.我怎样才能做到这一点?

最佳答案 smartmatch操作符不支持这一点.你必须自己建造它.
List::MoreUtils
all似乎很棒.

use strict;
use warnings 'all';
use feature 'say';
use List::MoreUtils 'all';

my @matches = (
    qr/foo/,
    qr/ooo/,
    qr/bar/,
    qr/asdf/,
);

my $string = 'fooooobar';
say $string if all { $string =~ $_ } @matches;

这没有输出.

如果将$string更改为’fooooobarasdf’,它将输出字符串.

点赞