4

我想检查一个字符串是否匹配多个正则表达式模式。我遇到了一个相关的问题,Brad Gilbert使用 smartmatch 运算符回答了这个问题:

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

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

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

4

1 回答 1

2

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'它将输出字符串。

于 2016-09-08T15:13:05.160 回答