2011-11-14 3 views
0

저는이 플러그인의 메 커닉을 WordPress에서 알아 내려고하고 있습니다. 나는이처럼 보이는으로, preg_match_all 기능이 : 나는 상황을 제대로 이해한다면, count($matches[0])$content에 하나의 일치가 가정preg_match_all에서 일치를 반복하십시오.

preg_match_all('/(?<=\\[\\[).+?(?=\\]\\])/', $content, $matches, PREG_PATTERN_ORDER); 
$numMatches = count($matches[0]); 

for ($i = 0; $i < $numMatches; $i++) { 
    $postSlug = $matches[0][$i]; 
} 

합니다.

내 목표는 preg_match_all 스크립트에서 일치하는 전체 배열을 허용하는 for 문을 다시 작성하는 것입니다.

나는 for 문을 foreach ($matches as $postSlug)으로 대체해야한다고 가정하고, 결국에는 혼란스러운 $matches[0][$i]을 귀찮게한다.

최종 출력은 배열의 각 요소를 반복하지 않는 것처럼 보입니다. 어떤 아이디어? 감사!

답변

2

I을 올바르게 이해한다면, 계산 ($ 일치 [0] 단 하나의 일치 $의 콘텐츠에 있다고 가정

그렇진;. $matches[0] 전체 정규 표현식에 일치의 배열을 나타냅니다 (정규 표현식의 첫 번째 일치 그룹에 일치하는 배열 인 $matches[1]과 반대). 따라서 count($matches[0])은 첫 경기 그룹에서 일치하는 숫자입니다.

그리고 for 루프를로 다시 썼다.루프이지만 두 방법 모두 $matches[0]의 모든 요소를 ​​통과해야하므로이 변경 사항은 변경되지 않습니다. 찾고있는 결과가 정규 표현식과 일치하는지 확신합니까?

+0

맞습니다. $ matches [0]은 전체 표현식에서 일치하는 배열을 참조합니다. 배열을 성공적으로 루프 할 수있었습니다. 감사. – AlxVallejo

1

이 코드를 다시 작성하려면 PREG_PATTERN_ORDER 대신 마지막 인수로 PREG_SET_ORDER을 조사하는 것이 좋습니다. 결과 배열을 결과별로 그룹화하고 일치 그룹을 두 번째 수준으로 그룹화합니다.

는 그런 다음 그 위에 바로 루프를 다음 수 :

foreach ($matches as $matchgroup) { 
    $postslug = $matchgroup[0]; 
} 

당신은 여전히 ​​"완전한 일치"를 얻기 위해 [0]이 필요합니다. 패턴에 (..) 그룹이있는 경우 [1][2]은 해당 그룹과 일치합니다.