2016-06-20 4 views
0

연습 및 차후 개발에 관해서는 PHP 라우터를 사용하고 있습니다. 이 라우터를 들어, 내 매핑 경로 그들에 매개 변수를 가질 수, 경로는 다음과 같습니다한 줄에 여러 개의 정규식 일치 찾기

/홈/{I : pageNum}/{S : 아이디}

지금이 개 변수가 있습니다

  • pageNum 변수 문자열 유형
에게 인 INT 타입
  • 사용자 이름 변수이며,이 경로에서

    {((?<type>\D):)?(?<name>[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]+)} 
    

    이 잘 작동하지만, 유일한 문제는 단지 첫 번째 변수를 캡처하는 것입니다 :이 데이터를 캡처

    , 난이 정규 표현식을 썼다.

    새 행에 새 경로를 추가 할 때만 더 많은 일치 항목을 캡처합니다.

    ( 님 및 ) 님의 주변에서 정규식 전체를 캡처하려고했습니다. 이것은 작동하지 않았다.

    한 줄의 텍스트에서 더 많은 일치를 캡처 할 수 있도록이 정규 표현식을 만들려면 어떻게해야합니까? 기본 PREG_PATTERN_ORDER을 사용

    foreach($matches as $match) { 
        echo $match['name'] . ' = ' . $match['type']; 
    } 
    

    : 다음

    preg_match_all("/{((?<type>\D):)?(?<name>[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]+)}/", 
           "/home/{i:pageNum}/{s:userName}", 
           $matches, 
           PREG_SET_ORDER); 
    

    : 그냥 preg_match_all()PREG_SET_ORDER를 사용

    preg_match("/{((?<type>\D):)?(?<name>[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]+)}/", "/home/{i:pageNum}/{s:userName}", $matches); 
    
  • +0

    일치하는 PHP 함수는 무엇입니까? – h4r5h4

    +0

    이 정규식을 사용하는 PHP 코드를 표시 할 수 있습니까? 나는 당신이 [preg_match_all()] (https://php.net/preg_match_all) 대신에 [preg_match()] (https://php.net/preg_match)를 사용하고 있다고 가정합니다. PHP는 한 번 대 글로벌 매칭을위한 두 개의 분리 된 함수를 가지고 있습니다. 다른 언어들은 전역 매칭을 위해서 단지'// g '를 사용합니다. –

    +0

    내 질문이 업데이트되었습니다. 실제로 preg_match()를 사용하고 있습니다. – Bas

    답변

    0

    :이 정규 표현식을 호출하기위한

    , 나는 다음과 같은 PHP 함수를 사용 너는 할 수 있었다 :

    $matches = array_combine($matches['name'], $matches['type']); 
    
    foreach($matches as $name => $type) { 
        echo "$name = $type"; 
    } 
    
    +0

    나는이 질문을 게시했고 StackOverflow에서 활성화되지 않았다는 것을 completen 깜빡했다. 여기에 답을 주셔서 감사합니다. 실제로 필요한 것입니다. 내 유일한 질문은'PREG_SET_ORDER'와'PREG_PATTERN_ORDER'는 무엇을 하는가? – Bas

    +0

    그들은 배열에서 어떻게 일치가 반환되는지 결정합니다 : http://php.net/manual/en/function.preg-match-all.php – AbraCadaver

    관련 문제