2009-07-10 3 views
4

첫째, 정규식 패턴이 유효한지 확인하기 위해 어떤 종류의 함수가 내장되어 있는지 궁금합니다. 표현식의 작동 여부를 확인하고 싶지는 않습니다 - 가능한 경우 패턴의 구문이 유효한지 확인하기 만하면됩니다.정규식 패턴이 Perl에서 유효한지 어떻게 확인할 수 있습니까?

내장 기능이 없으면 어떻게해야합니까? 나도 할 필요가 있니?

검색 할 수있는 내장 함수/모듈 디렉토리가 있습니까? 이와 같이 더 많은 질문을 피할 수 있습니까? 고맙습니다.

편집 : 나는 사용자 입력을 기반으로 즉석에서 이러한 패턴을 생성 할 계획이라고 언급해야합니다. 이것이 내가 실제로 실행되는지 확인하기 위해 유효성을 검사하려는 이유입니다.

답변

20

나는 더 펄 전문가입니다,하지만 어쩌면 this은 도움이 될 수 있습니다 반환

#!/usr/bin/perl 

my $pattern = "["; # <-insert your pattern here 
my $regex = eval { qr/$pattern/ }; 
die "invalid regex: [email protected]" if [email protected]; 

이 : 두 번째 질문에 대한

invalid regex: Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE/at test.pl line 4. 

당신은 항상 CPAN에서 작업의 거대한 몸을 확인할 수 있습니다 .

+2

서버용 인 경우 사용자 생성 입력에서 임의 코드를 실행하지 않도록주의 깊게 고려하십시오. 나는 그것이 어떻게 일어날 수 있었는지는 알지 못한다. 그러나 그것은 확신 할 수 없다. –

+0

@ George : 이것은 매우 좋은 지적입니다. 언급 해 주셔서 감사합니다. – bernie

+1

오늘 나는 국경에 있었고 perl 요리 책은 eval을 제안했습니다. – radicalmatt

2

나는 "유효하다"라는 말이 무슨 뜻인지 잘 모르겠습니다. 표현식이 구문 적으로 괄호 밖의 경우 (예 : 괄호가 누락 된 경우) 통역사가 알려주고 프로그램이 컴파일되지 않습니다.

그러나 논리적 또는 의미 적 오류로부터 사용자를 보호하지는 못합니다. 즉, 정규 표현식은 유효한 Perl 일 수 있지만 끔찍한 일을하거나 전혀 수행하지 않습니다. 어쩌면 YAPE::Regex::Explain과 같이 정규 표현식에 대한 설명을 원할 수도 있습니다.

1

사용할 수있는 또 다른 cpan 모듈은 Regexp::Parser입니다. 설명서에서 :

my $parser = Regexp::Parser->new; 
if (! $parser->regex($rx)) { 
    my $errmsg = $parser->errmsg; 
    my $errnum = $parser->errnum; 
    # ... 
} 
관련 문제