update : 2015.11.03
php.shukuma.com

검색:
 
 
정규표현식 매치를 수행

preg_match

(PHP 4, PHP 5)

preg_match정규표현식 매치를 수행

설명

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )

pattern에 주어진 정규표현식을 subject에서 찾습니다.

인수

pattern

탐색할 패턴 문자열.

subject

입력 문자열.

matches

matches가 주어지면, 검색 결과를 채워넣습니다. $matches[0]는 전체 패턴 텍스트가 들어가고, $matches[1]부터 괄호로 둘러싸인 서브 패턴을 채워넣습니다.

flags

flags는 다음과 같은 플래그를 사용할 수 있습니다:

PREG_OFFSET_CAPTURE
이 플래그를 넘기면, 모든 매치에 대한 문자열 시작 위치를 함께 반환합니다. 반환값을 0에 매치한 문자열을 가지고, 1에 문자열 시작 위치를 가지는 배열을 원소로 갖는 배열로 변경하는 점에 주의하십시오.

offset

일반적으로, 검색은 목표 문자열의 처음에서 시작합니다. 선택적인 인수 offset으로 검색을 시작할 다른 위치를 지정할 수 있습니다. (바이트 단위)

Note:

offset을 사용하는 것은 preg_match()의 주제 문자열로 substr($subject, $offset)을 사용하는 것과 다릅니다. pattern^, $, (?<=x) 등의 단정을 포함할 수 있기 때문입니다. 비교:

<?php
$subject 
"abcdef";
$pattern '/^def/';
preg_match($pattern$subject$matchesPREG_OFFSET_CAPTURE3);
print_r($matches);
?>

위 예제의 출력:

Array
(
)

반면 이 예제는

<?php
$subject 
"abcdef";
$pattern '/^def/';
preg_match($patternsubstr($subject,3), $matchesPREG_OFFSET_CAPTURE);
print_r($matches);
?>

다음 결과가 됩니다

Array
(
    [0] => Array
        (
            [0] => def
            [1] => 0
        )

)

반환값

preg_match()pattern이 매치된 횟수를 반환합니다. 이는 0(매치 없음)이나 1입니다. preg_match()는 처음 매치 후에 검색을 중지하기 때문입니다. 대조적으로, preg_match_all()subject의 끝까지 계속해서 실행합니다. 에러가 발생하면, preg_match()FALSE를 반환합니다.

변경점

버전 설명
4.3.3 offset 인수 추가
4.3.0 PREG_OFFSET_CAPTURE 플래그 추가
4.3.0 flags 인수 추가

예제

Example #1 문자열 "php" 찾기

<?php
// 패턴 구분자 뒤의 "i"는 대소문자를 구별하지 않게 합니다.
if (preg_match("/php/i""PHP is the web scripting language of choice.")) {
    echo 
"발견하였습니다.";
} else {
    echo 
"발견하지 못했습니다.";
}
?>

Example #2 단어 "Web" 찾기

<?php
/* 패턴에서 \b는 단어를 지시합니다. 단어 "web"만 매치하고,
 * "webbing"이나 "cobweb" 등의 부분적인 경우에는 매치하지 않습니다. */
if (preg_match("/\bweb\b/i""PHP is the web scripting language of choice.")) {
    echo 
"발견하였습니다.";
} else {
    echo 
"발견하지 못했습니다.";
}

if (
preg_match("/\bweb\b/i""PHP is the website scripting language of choice.")) {
    echo 
"발견하였습니다.";
} else {
    echo 
"발견하지 못했습니다.";
}
?>

Example #3 URL에서 도메인 이름 얻기

<?php
// URL에서 호스트 이름 얻기
preg_match('@^(?:http://)?([^/]+)@i',
    
"http://www.php.net/index.html"$matches);
$host $matches[1];

// 호스트 이름에서 마지막 두 세그멘트 얻기
preg_match('/[^.]+\.[^.]+$/'$host$matches);
echo 
"도메인 이름은: {$matches[0]}\n";
?>

위 예제의 출력:

도메인 이름은: php.net

Example #4 이름 있는 서브패턴 사용하기

<?php

$str 
'foobar: 2008';

preg_match('/(?<name>\w+): (?<digit>\d+/'$str$matches);

print_r($matches);

?>

위 예제의 출력:

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

주의

Tip

하나의 문자열이 다른 문자열에 들어있는지 확인하기 위해서 preg_match()를 사용하지 마십시오. 더욱 빠른 strpos()strstr()을 사용하십시오.

참고