2016-09-08 4 views
4

문자열이 여러 정규식 패턴과 일치하는지 확인하고 싶습니다. 패턴 중 하나가 일치하는 경우문자열이 smartmatch를 사용하는 배열의 모든 패턴과 일치하는지 어떻게 확인할 수 있습니까?

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

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

if 문을 입력,하지만 난 확인 할 그 패턴 일치의 모든 : 나는 smartmatch 연산자를 사용 related question, 브래드 길버트 answered을 가로 질러왔다. 어떻게해야합니까?

+0

기본적으로 미리 컴파일 된 정규식 목록이 있으며 모든 패턴이 smartmatch 연산자의 RHS와 일치하면 true를 반환하는 코드를 작성하려고합니다. 그렇다면 질문을 편집하고 샘플 입력/출력을 포함하십시오. – simbabque

+1

_smart-matching_ 및 _smartmatch_에 대한 태그 동의어를 작성해야합니다. – simbabque

+0

@simbabque 스마트 매칭은 smartmatch의 동의어 여야합니다. [운영자의 이름은 smartmatch입니다] (http://perldoc.perl.org/perlop.html#Smartmatch-Operator). [동의어 제안 및 승인] (http://stackoverflow.com/tags/smartmatch/synonyms)을 할 수있는 유일한 사용자는 ikegami, Joel Berger, raina77ow 및 Kenney입니다. (그리고 모두 * 투표해야합니다.) 기존 질문 몇 개를 재검토하거나이 질문에 대한 답을 +5 점 얻으십시오. 그러나 태그는 처음부터 필요합니까? 나는 언어의 모든 연산자에 대해 태그가 필요하다고 생각하지 않습니다. – ThisSuitIsBlackNot

답변

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'으로 변경하면 문자열이 출력됩니다.

+4

어쨌든 smartmatch를 사용해서는 안된다는 점은 주목할 가치가 있습니다. 실험적으로 표시되며 사전 통지없이 제거되거나 변경됩니다. (이와 같은 소리는 5.26에서 발생합니다.) – ikegami

+0

@ikegami 예. 나는 당신의 의견을 계획하고 있었기 때문에 대답에서 벗어났습니다. 그러나 잊어 버렸습니다. – simbabque

+1

[List :: Util] (https://metacpan.org/pod/List::Util#all)도 요즘에는 모두 'all'을 가지고 있으므로 List :: MoreUtils가 필요하지 않습니다. – melpomene

관련 문제