2013-06-10 3 views
1

하나의 명령문 만 사용하여 PHP에서 정규 표현식을 사용할 수 있는지 궁금합니다. 이 질문은 이것이 가능한지보기위한 더 많은 도전입니다.preg_match - 하나의 명령문으로 만 일치하십시오.

지금 당신이 뭔가를 할 필요가 :

preg_match('#(\d+)$#', $subject, $match); 
echo $match[1]; 

가 어떻게 대신 두, 하나 개의 문장으로 $match 액세스합니까?

preg_replace을 사용하고 싶지 않습니다.

폐쇄가 가능한 경우 더 좋습니다. 나는 멋진 코드를 좋아한다.

+0

모두의 전체 목록 : 만 캡처 괄호 한 그룹이 정규 표현식에 많이있는 경우 http://www.php.net/manual/en/function.preg-match.php

, 당신은 당신의 목적에 대한 바로 가기 기능을 만들 수 preg_ * functions : http://www.php.net/manual/en/ref.pcre.php. – hek2mgl

답변

3

나는 그것이 가능하지 않을 것이라고 생각합니다. 세 번째 인수 $matches은 항상 배열입니다. PHP 문서에서 :

일치 항목이 제공되면 검색 결과가 채워집니다. $ matches [0]은 전체 패턴과 일치하는 텍스트를 포함하고 $ matches [1]은 첫 번째 캡처 된 괄호 안의 하위 패턴과 일치하는 텍스트를 갖습니다.

출처 :

function preg_match_one($regex, $subject) { 

    if(preg_match($regex, $subject, $matches)) { 
     return $matches[1]; 
    } 
    else { 
     return false; 
    } 

} 
+1

+1 사용자 정의 기능을 정의합니다. 그것이 방법입니다. :) – hek2mgl

+0

그냥'preg_match'가 발견 된 횟수 대신에'$ match'를 반환하기를 바랍니다. 누군가가 관심이 있다면'count() - 1'을 사용하거나'$ match'를'& $ count'로하면 그 값은 저장 될 것입니다. 당신의 대답은 제가 목표로 한 것이 아니 었습니다. 노력을 기울여서 그것을 받아 들일 것입니다. – silkfire

+0

@silkfire 이렇게'preg_match'가 구현되는 방법입니다. 즉,이 함수를 만드는 것 외에 다른 방법은 없습니다. 만약 당신이 여전히 주장하고, PHP의 내부로 들어가서 C 소스 코드를 수정한다면, 나는이 방법을 선호 할 것입니다 :) – HamZa

관련 문제