2011-11-27 2 views
0

정규 표현식 패턴의 출현 가능성이있는 (또는 경우에 따라서는 아닐 수도있는) 문서에 대해 일부 데이터 조작을 수행하고 있습니다. 함유량.PHP : 문서의 모든 정규 표현식을 일치시키는 방법

문서를 처리하는 데 사용할 PHP 함수를 작성하고 싶습니다. 함수의 작업은 문서에있는 모든 일치 패턴 사운드의 배열을 반환하거나 (존재하는 경우) 빈 배열을 반환하는 것입니다. 일치하는 항목이 없습니다.

PHP 함수 preg_match_all을 사용해야한다는 것이 확실하지만, preg_match_all이 반환하는 배열의 형식을 이해하지 못합니다.

<?php 

    $pattern = "^[h].[a-z]{3,4}"; 
    $doc = file_get_contents('some_pathname'); 

    function get_matching_patterns($pattern, $doc){ 
    $out = array(); 

    if (strlen($doc) && strlen($pattern)){ 
     // not sure about this - I don't like the complicated nested array returned 
     // by preg_match-all 
     preg_match_all($pattern, $doc, $out); 
    } 

    return out; 
    } 
?> 
+3

$ out ($ missing). print_r ($ out) 또는 var_dump를 시도하십시오. – galchen

+0

구조를 볼 수 있으며 ** doc ** 및 ** pattern **에는 $ 또한 누락되었습니다. -> ** $ doc **, ** $ pattern ** – abcde123483

+0

죄송합니다. 너무 많은 언어!. 때때로, 나는 PHP가 sigils를 요구한다는 것을 잊는다!. 코드 스 니펫을 수정하겠습니다. –

답변

0
  • 당신은 $
  • 귀하의 경우에는 단순히 $out[0]
  • 을 반환 할 수 있습니다 누락하고 다음과 같이 단순히 일치하는 문자열의 1 차원 (즉, 비 중첩 배열)을 반환 할
+0

두 개 이상의 경기가 반환되는 경우 어떻게됩니까? $ out [0]은 중첩 배열입니까? 내 말은 $ out [0]이 항상 ** 중첩 된 배열 (패턴이 일치 할 때) 인 경우 ** 간단히 처리하고 중첩되지 않은 배열을 반환 할 수 있음을 의미합니다. 이것이 당신이 제안하고있는 것입니까 (또는 제가 오해 한 것입니까?)? –

+0

'$ out [0]'은 일치하는 모든 항목을 포함하는 배열입니다. 패턴에 '$ out [1]'이 없습니다. '# ([h].) [a-z] {3,4} #'(괄호에주의하십시오)와 같은 정규 표현식을 사용하면'[h] .' 부분을'$ out [1]'에서 찾을 수 있습니다. –

관련 문제