2011-01-27 10 views
0
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'l' in /var/www/test.php on line 9 

내 정규식 알 수없는 수정을 가지고 말하는하지만 정확히로 구분 될 수알 수없는 수정 'L'오류

preg_match_all("/\<select id\=\'subscription_division_id\'(.+?)</select>\/is", $html, $matches); 
+0

http://simplehtmldom.sourceforge.net/ – RobertPitt

답변

5

틀림없이 탈출하고 있습니다. select>\/is 반면

\<select id\=\'subscription_division_id\'(.+?)< 

이 (정규식 문자열이 /로 묶여) 정규 표현식 수정 있어야하는데 : 정규식 파서를 들어, 다음은 정규식입니다. 주어진 첫 번째 잘못된 수정자가 l 인 경우 해당 오류가 발생합니다. 따라서이를 해결하려면 닫는 태그의 슬래시를 벗어나야합니다. 그리고 btw. 당신은 꽤 많은 불필요한 일을 탈출하는이 충분하다 :

preg_match_all("/<select id='subscription_division_id'(.+?)<\/select>/is", $html, $matches); 
+3

+1, (일반적으로'~') 더 나은 것 그래서 이스케이프를 다른 구분 기호를 사용하지 전혀 필요하지 않습니다. – NikiC

3

PHP’s PCRE functions 필요한 오류를 패턴을 트리거 무슨 일이 일어나고 있는지 확실하지 않다 패턴을 옵션 modifiers에서 분리하는 delimiters 그러나 이러한 구분 기호가 패턴 내부에서 발생하면 이스케이프 처리해야합니다. 그래서 당신은 당신의 패턴 내부의 구분 기호를 / 탈출해야합니다

"/\<select id\=\'subscription_division_id\'(.+?)<\/select>/is" 
               ^

그렇지 않으면 패턴이 중간에 종료되고, 나머지는 수정으로 해석됩니다. 귀하의 경우처럼 나머지 (즉, select>/is)가 그러한 것으로 해석됩니다. se은 유효한 수정 자이지만 l은 유효하지 않습니다. 이것이 오류 메시지의 원인입니다.