preg_match_all
preg_quote
PCRE 함수 목록
PHP Manual

# 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, $matches, PREG_OFFSET_CAPTURE, 3);
  > print_r($matches);
  > ?>`

  > 위 예제의 출력:

  >     Array
  >     (
  >     )

  > 반면 이 예제는

  > `<?php
  > $subject = "abcdef";
  > $pattern = '/^def/';
  > preg_match($pattern, substr($subject,3), $matches, PREG_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()을 사용하십시오.

### 참고

- preg_match_all() - 전역 정규 표현식 매치를 수행합니다
- preg_replace() - 정규 표현식 검색과 치환을 수행
- preg_split() - 정규 표현식에 따라 문자열을 나눔

preg_match_all
preg_quote
PCRE 함수 목록
PHP Manual