2009-09-29 7 views
12

perl 정규식에서 일치하는 변수를 추출 할 수 있습니다 (아래 예).PHP regex에서 일치 항목 추출

# extract hours, minutes, seconds 
    $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format 
    $hours = $1; 
    $minutes = $2; 
    $seconds = $3; 

PHP로 작업하는 방법?

$subject = "E:[email protected] I:100955"; 
$pattern = "/^E:/"; 
if (preg_match($pattern, $subject)) { 
    echo "Yes, A Match"; 
} 

어떻게 이메일을 추출하나요? (우리는 그것을 폭발시키고 그것을 얻을 수 있지만, 정규 표현식을 통해 그것을 직접 얻는 방법을 원할 것입니다)?

일치 : 일치가 제공되는 경우
다음이 검색 결과를 채워 다음과 같이

답변

17

는 preg_match의 명명 된 서브 패턴 구문을 사용하십시오 :

<?php 

$str = 'foobar: 2008'; 

// Works in PHP 5.2.2 and later. 
preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches); 

// Before PHP 5.2.2, use this: 
// preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches); 

print_r($matches); 

?> 

출력 :

Array (
    [0] => foobar: 2008 
    [name] => foobar 
    [1] => foobar 
    [digit] => 2008 
    [2] => 2008) 
1

는 preg_match를 함수의 매개 변수를 사용 matchs. $ matches [0]에는 전체 패턴과 일치하는 텍스트가 포함되고 $ matches [1]에는 첫 번째 캡처 된 괄호 안의 하위 패턴과 일치하는 텍스트가 포함됩니다.

8

는 PHP를 manual

INT의 preg_match를 확인합니다 (문자열 $ 패턴 문자열 $ 대상 [, 배열을 & $ 일치 [INT의 $ 플래그 [, $ 오프셋]] int입니다])

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

$subject = "E:[email protected] I:100955"; 
$pattern = "/^E:(?<contact>\w+) I:(?<id>\d+)$/"; 
if (preg_match($pattern, $subject,$matches)) { 
    print_r($matches); 
} 
3

당신은 방금까지 콜론 뒤 모든 것을 캡처 현재 정규 표현식을 수정할 수 있습니다 첫 번째 공간 :

$subject = "E:[email protected] I:100955"; 
$pattern = "/^E:([^ ]+)/"; 
if (preg_match($pattern, $subject, $m)) { 
    echo "Yes, A Match"; 
} 
$email = $m[1]; 

정규 표현식에 익숙하지 않은 경우 [^ ]+"공백 이외의 모든 문자"를 의미하고이며 작동하려면 공백이 필요하지 않습니다. 어떤 이유로 입력이 "E : [email protected]""I : 12345" 비트없이 비트로 변경되면 여전히 작동합니다.