2013-03-11 3 views
1

단어 목록에서 모든 일치 패턴을 얻으려고합니다.preg_match 모든 시작 단어와 일치합니다.

$pattern = '/^(ab|abc|abcd|asdf)/'; 
preg_match_all($pattern, 'abcdefgh', $matches); 

나는 'AB, ABC와 ABCD'

그러나이 반환 전용 'AB을'싶어. 패턴을 폭발시킨 후 패턴을 반복하면 작동합니다.

단일 일치를 통해 해결할 수있는 방법이 있습니까?

답변

2

정규식은 문자열을 통해 일치하는 문자를 사용하므로 기본적으로 겹치는 일치 항목을 찾을 수 없습니다.

당신은 capturings 그룹과 함께 내다 주장과 같은 확장 된 기능을 사용할 수 있습니다,하지만 못생긴 건설이 필요합니다

preg_match_all(
    '/^ 
    (?:(?=(ab)))? 
    (?:(?=(abc)))? 
    (?:(?=(abcd)))? 
    (?:(?=(asdf)))? 
    /x', 
    $subject, $result, PREG_SET_ORDER); 
for ($matchi = 0; $matchi < count($result); $matchi++) { 
    for ($backrefi = 0; $backrefi < count($result[$matchi]); $backrefi++) { 
     # Matched text = $result[$matchi][$backrefi]; 
    } 
} 
관련 문제