[홈페이지제작] 방법
preg_match
지식블랙홀
2009. 1. 20. 19:34
preg_match
int preg_match ( string pattern, string subject [, array matches [, int flags [, int offset]]])
PHP 3>= 3.0.9, PHP 4
정규표현식 매치를 수행합니다.
pattern에 주어진 정규표현식을 subject에서 찾습니다.
matches가 주어지면, 검색 결과를 채워넣습니다. $matches[0]는 전체 패턴 텍
스트가 들어가고, $matches[1]부터 괄호로 둘러싸인 서브 패턴을 채워넣습니다.
flags는 다음과 같은 플래그를 사용할 수 있습니다
:
PREG_OFFSET_CAPTURE
: 이 플래그를 넘기면, 모든 매치에 대한 문자열 시작 위치를 함께 반환합니다. 반환값을 0에 매치한 문자열을 가지고, 1에 문자열
시작 위치를 가지는 배열을 원소로 갖는 배열로 변경하는 점에 주의하십시오. 이 플래그는 PHP 4.3.0부터 사용할 수 있습니다.
flags 인자는 PHP 4.3.0부터
사용할 수 있습니다.
보통, 검색은 목표 문자열의 처음에서 시작합니다. 선택적인 인자 offset으로 검색을 시작할 다른 위치를 지정할 수 있습니다. 이는
preg_match()의 목표 문자열에 substr()($subject, $offset)을 넘기는 것과 동일합니다. offset 인자는 PHP 4.3.3부터 사용할 수 있습니다.
preg_match()는
pattern이 매치된 횟수를 반환합니다. 이는 0(매치 없음)이나 1입니다. preg_match()는 처음 매치 후에 검색을 중지하기 때문입니다. 대조적으로,
preg_match_all()는 subject의 끝까지 계속해서 실행합니다. 에러가 발생하면, preg_match()는 FALSE를 반환합니다
작은 정보: 단순히 하나의 문자
열이 다른 문자열에 들어있는지를 확인하고 싶을때는 preg_match()를 사용하지 마십시오. 대신, strpos()나 strstr()를 사용하는 편이 더욱 빠릅니
다.
예 1. 문자열 "php" 찾기
<?php
// 패턴 구분자 뒤의 "i"는 대소문자를 구별하지 않게 합니다.
if (preg_match("/php/i", "PHP is
the web scripting language of choice.")) {
echo "발견하였습니다.";
} else {
echo "발견하지 못했습니다.";
}
?>
예 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 "발
견하지 못했습니다.";
}
?>
예 3. URL에서 도메인 이름 얻기
<?php
// URL에서 호스트 이름 얻기
preg_match("/^(http:\/\/)?([^\/]+)/i",
"http://www.php.net/index.html", $matches);
$host = $matches[2];
// 호스트 이름에서 마지막 두 세그
멘트 얻기
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "도메인 이름은: {$matches[0]}\n";
?>
이 예제의 결과
:
도메인 이름은: php.net
예 3. 간단한 예제
<?php
if ( !preg_match("/<field1:(.*?)><field2:(.*?)>/is", $string,
$matches) )
{
$field1 = $matches[1];
$field2 = $matches[2];
}
?>
.
int preg_match ( string pattern, string subject [, array matches [, int flags [, int offset]]])
PHP 3>= 3.0.9, PHP 4
정규표현식 매치를 수행합니다.
pattern에 주어진 정규표현식을 subject에서 찾습니다.
matches가 주어지면, 검색 결과를 채워넣습니다. $matches[0]는 전체 패턴 텍
스트가 들어가고, $matches[1]부터 괄호로 둘러싸인 서브 패턴을 채워넣습니다.
flags는 다음과 같은 플래그를 사용할 수 있습니다
:
PREG_OFFSET_CAPTURE
: 이 플래그를 넘기면, 모든 매치에 대한 문자열 시작 위치를 함께 반환합니다. 반환값을 0에 매치한 문자열을 가지고, 1에 문자열
시작 위치를 가지는 배열을 원소로 갖는 배열로 변경하는 점에 주의하십시오. 이 플래그는 PHP 4.3.0부터 사용할 수 있습니다.
flags 인자는 PHP 4.3.0부터
사용할 수 있습니다.
보통, 검색은 목표 문자열의 처음에서 시작합니다. 선택적인 인자 offset으로 검색을 시작할 다른 위치를 지정할 수 있습니다. 이는
preg_match()의 목표 문자열에 substr()($subject, $offset)을 넘기는 것과 동일합니다. offset 인자는 PHP 4.3.3부터 사용할 수 있습니다.
preg_match()는
pattern이 매치된 횟수를 반환합니다. 이는 0(매치 없음)이나 1입니다. preg_match()는 처음 매치 후에 검색을 중지하기 때문입니다. 대조적으로,
preg_match_all()는 subject의 끝까지 계속해서 실행합니다. 에러가 발생하면, preg_match()는 FALSE를 반환합니다
작은 정보: 단순히 하나의 문자
열이 다른 문자열에 들어있는지를 확인하고 싶을때는 preg_match()를 사용하지 마십시오. 대신, strpos()나 strstr()를 사용하는 편이 더욱 빠릅니
다.
예 1. 문자열 "php" 찾기
<?php
// 패턴 구분자 뒤의 "i"는 대소문자를 구별하지 않게 합니다.
if (preg_match("/php/i", "PHP is
the web scripting language of choice.")) {
echo "발견하였습니다.";
} else {
echo "발견하지 못했습니다.";
}
?>
예 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 "발
견하지 못했습니다.";
}
?>
예 3. URL에서 도메인 이름 얻기
<?php
// URL에서 호스트 이름 얻기
preg_match("/^(http:\/\/)?([^\/]+)/i",
"http://www.php.net/index.html", $matches);
$host = $matches[2];
// 호스트 이름에서 마지막 두 세그
멘트 얻기
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "도메인 이름은: {$matches[0]}\n";
?>
이 예제의 결과
:
도메인 이름은: php.net
예 3. 간단한 예제
<?php
if ( !preg_match("/<field1:(.*?)><field2:(.*?)>/is", $string,
$matches) )
{
$field1 = $matches[1];
$field2 = $matches[2];
}
?>
.