2009-10-20 4 views
1

Hy 얘들 아!preg_match_all 인쇄 * all * 일치

preg_match_all을 사용하여 모든 일치 항목을 인쇄해야합니다.

$search = preg_match_all($pattern, $string, $matches); 

foreach ($matches as $match) { 
    echo $match[0]; 
    echo $match[1]; 
    echo $match[...]; 
} 

문제는 내가 내 문자열이 얼마나 많은 경기를 모르는, 그리고 내가 아는 경우에도 그것은 모든 $match[] 년대를 입력 꽤 바보 될 1000 인 경우입니다. 나는 그것이 기본적인 것들임을 깨닫는다. 그러나 나는 단지 배우는 중이다.

힌트를 보내 주셔서 감사합니다.

답변

6

$match[0], $match[1] 등 항목이 아닌 개인 경기, 그들은 "캡처"는 것입니다. 그것은 당신이 결과,에 대한 을하지 검색하는 것을 기반으로하기 때문에

에 관계없이가 일치 얼마나 많은, $matches 항목의 수는 일정하다. 검색 패턴에는 캡처 괄호 쌍마다 하나 이상의 항목이 항상 하나 이상 있습니다.

$matches = array(); 
$search = preg_match_all("/\D+(\d+)/", "a1b12c123", $matches); 
print_r($matches); 

일치가 3 경기가 발견 된 경우에도 두 항목이됩니다 : 당신이 할 경우 예를 들어

. $matches[0]은 "a1", "b12"및 "c123"(각 항목의 전체 일치 항목)을 포함하는 배열이고 $matches[1]은 각 항목의 첫 번째 캡처 즉 "1", "12"및 "123" . 각각 일치하는 문자열에서 첫 번째 캡처 표현을 인쇄합니다

foreach ($matches[1] as $match) { 
    echo $match; 
} 

:

나는 당신이 원하는 것은 더 같은 것입니다 생각합니다.

0

반복적으로 반복 할 수 있습니다. 이 예는 RecursiveArrayIterator를 통해 SPL 및 PHP 버전 5.1이 필요합니다

foreach(new RecursiveArrayIterator($matches) as $match) 
    print $match;