2010-07-02 5 views
2

Perl은 Regexp::Optimizer입니다. PHP와 비슷한 것이 있습니까? 내 검색 결과가 없습니다.PHP에 정규 표현식 최적화 프로그램이 있습니까?

예를 들어, 정규 표현식 :: 최적화

/foobar|fooxar|foozap/ 

/foo(?:[bx]ar|zap)/ 

업데이트를 설정합니다 : 나는 사람들이 시도하지 않을 수 있도록 정말 짧은 질문을 유지하고 싶어 그것을 과도하게 해석하지만 반대의 효과가 있음이 밝혀졌습니다. 나는 정규 표현식을 취하고 기능적으로 동등하지만 더 효율적인 정규 표현식을 출력하는 것을 찾고있다. 필자는 Perl에서 이러한 것을 발견했지만 PHP에서는 발견하지 못했습니다. 그런 것이 있는지 궁금합니다. 그 점에서, 나는 예/아니오 대답을, 가능한 경우 링크와 함께 기대합니다. 혼란에 감사드립니다.

+1

아니요. 적어도 네이티브는 아닙니다. 버전 3 이후로 PHP를 사용했습니다. –

+0

그래, 나는 사실상 찾을 수있는 희망이 없지만, 단지를 대비하여 물었다. –

답변

0

로 시작하는 항목을보고하는 것처럼 더 좋은 예는

/foobar|barfoo|helloworld/S 

같은 몇 시작하는 문자를 찾습니다 무언가를 것 2010 년 12 월 1 일 현재 PHP 용 표현식 최적화 도구입니다.

1

아니요 (afaik). 그러나 사람들이 정규식을 자주 사용하는 기본 확인을 위해 ctype functions을 수행하십시오.

1

PCRE는 Perl 구문을 지원하므로 Perl 모듈 만 사용하십시오. PHP에는 즉시 Perl 코드를 호출 할 수있는 확장 기능이 있습니다. 하지만 당신은 그냥 간부 인 당신은 '라이브'변환이 필요하지 않는 결과를 캐시 할 수 :

$re = exec('perl -M"Regexp::Optimizer" -e 'print Regexp::Optimizer->new->optimize(qr'.escapeshellcmd($re).')'; 
+0

tehehe. 그러나 임원이 컴파일 할 때 PCRE가 만드는 최적화 이상의 성과를 얻을만한 가치가 있는지 궁금합니다. – p00ya

+0

사실,하지만 프로그램을 실행할 때마다 정규식을 최적화해야하는 이유는 무엇입니까? 개발에서 테스트로 이동할 때마다 최적화하지 않는 이유는 무엇입니까? – ircmaxell

+1

내가 말했듯이, 한 번하고 캐시하는 것이 좋습니다. exec()는 아마도 dl (perl)보다 훨씬 느립니다. 그러나 그것을 앵무새 바이트 코드로 컴파일함으로써 최적화 될 수 있습니다. 어쨌든 PHP에서 regexp optimizer를 다시 구현하는 것은 가치가 없습니다. PHP에서. PHP! – mario

1

당신은 (정규식이 후 캐시 처음 컴파일하는 동안 공부 할 정규식에 S 옵션을 전달할 수 있습니다 스크립트가

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

) 죽을 때까지 정규 표현식 에드 마스터의 PHP 장에서 상당히 잘 설명된다. 3 그리고 당신이주는 특별한 예에서는 유용한 방식으로 최적화 될 것입니다.

편집 : 실제로 이것에 대해 생각한 후에도 PCRE가 특정 예제를 최적화 할 것이기 때문에 S 옵션이 필요하지 않습니다. 그 다음 그냥 밝혀, 일반 제네릭이 없다 그래서 [FBH]

+0

이것은 내가 찾고있는 것이 아니지만 S 한정자는 제한된 수의 경우 (즉 고정 된 시작 문자가없는 고정되지 않은 패턴)에서 도움을 줄 수 있습니다. 하지만 실제로는 정규 표현식 최적화를 대체하지는 않습니다. –