2011-08-07 7 views
3

파이썬 스크립트를 PHP로 변환하려고합니다.파이썬 정규식 PHP?

다음이 정규 표현식은 파이썬에서 작동 :

'/\*\*([\w\n\(\)\[\]\.\*\'\"\-#|,@{}_<>=:/ ]+?)\*/' 
'(?:\* ([\w\d\(\),\.\'\"\-\:#|/ ]+)|(?<= @)(\w+)(?: (.+))?)' 

... 내가 PHP에서 그들을 실행하려고하면 그러나, 내가 얻을 :

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier ']' 

어떻게?

+2

적절한 구분 기호 (http://php.net/manual/en/regexp.reference.delimiters.php)를 사용해야합니다. 첫 번째 문자는 항상 구분 기호로 취급됩니다. 따라서 PHP는'<> = : /'까지만 첫 번째 표현식을 해석 한 다음 올바른 수식어가 아닌']'을 찾습니다. –

답변

1

이유는, PHP는 정규 표현식에 주위에 구분 기호를 기대하고 있다는 것입니다 구분자로 사용하고 뒤에 수정 자로 해석합니다.

(나는 또한 불필요한 백 슬래시를 제거) 새로운 구분하여 정규식을 포위하고 다시 시도 :

'%/\*\*([\w\n()\[\].*\'"#|,@{}_<>=:/ -]+?)\*/%' 
'%(?:\* ([\w\d(),.\'"\:#|/ -]+)|(?<= @)(\w+)(?: (.+))?)%' 

힌트 : 사용 RegexBuddy 이러한 일을 할 수 있습니다. 정규 표현식을 언어 A로 작성하여 언어 B로 변환합니다.

1

PCRE (preg_match_all 포함)에는 패턴 경계가 필요합니다. /, @, #, % 또는 다른 많은 가능한 옵션으로 전체 패턴을 래핑해야합니다. 당신도 패턴을 사용하는 것처럼 보이지 않는 내가 %을 제안, 즉 : 그것은 제 1 및 제 2 슬래시를 취급 있도록

%(?:\* ([\w\d\(\),\.\'\"\-\:#|/ ]+)|(?<= @)(\w+)(?: (.+))?)%

+0

하 - 잡았다! 나는 '/'를 사용하고 있었지만 실제로 패턴 내부에서 사용되었습니다! – trapach