PHP 정규표현식 본문
PHP 정규표현식
- 2016. 5. 5. 21:09
원문/출처 : www.catswhocode.com/blog/15-php-regular-expressions-for-web-developers/
번역/추철 : http://smartjuho.tistory.com/entry/PHP-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D
정규표현식 문법
정규식 | 결과 |
foo | The string “foo” |
^foo | “foo” at the start of a string |
foo$ | “foo” at the end of a string |
^foo$ | “foo” when it is alone on a string |
[abc] | a, b, or c |
[a-z] | Any lowercase letter |
[^A-Z] | Any character that is not a uppercase letter |
(gif|jpg) | Matches either “gif” or “jpeg” |
[a-z]+ | One or more lowercase letters |
[0-9.-] | Ðny number, dot, or minus sign |
^[a-zA-Z0-9_]{1,}$ | Any word of at least one letter, number or _ |
([wx])([yz]) | wy, wz, xy, or xz |
[^A-Za-z0-9] | Any symbol (not a number or a letter) |
([A-Z]{3}|[0-9]{4}) | Matches three letters or four numbers |
정규표현식을 사용하는 함수
Function | Description |
---|---|
preg_match() | 문자열에 지정한 패턴이 존재하면 true, 아니면 false를 리턴 |
preg_match_all() | 지정한 패턴과 일치하는 모든 문자열을 배열에 저장 |
preg_replace() | 지정한 패턴과 일치하는 문자열을 교체 |
preg_split() | 패턴을 기준으로 문자열을 분리하려 배열로 리턴 |
preg_grep() | 배열중에 지정된 패턴을 포함하는 요소들을 배열로 리턴 |
preg_ quote() | 지정된 패턴 앞에 '\'(역슬래쉬)를 추가한 문자열을 리턴. |
자주 사용되는 함수들
// 도메인 유효성 검증
$url = "http://www.naver.com/";
if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)) {
echo "Your url is ok.";
} else {
echo "Wrong url.";
}
// 특정 문자의 강조
$text = preg_replace("/b(강조할문자)b/i", '<span style="background:#5fc9f6">1</span>', $text);
echo $text;
// 검색어에 효과주기
$title = get_the_title();
$keys= explode(" ",$s);
$title = preg_replace('/('.implode('|', $keys) .')/iu',
'<strong class="search-excerpt">\0</strong>', $title);
// 문서에 삽입된 모든 이미지 추출
$images = array();
preg_match_all('/(img|src)=("|')[^"'>]+/i', $data, $media);
unset($data);
$data=preg_replace('/(img|src)("|'|="|=')(.*)/i',"$3",$media[0]);
foreach($data as $url)
{
$info = pathinfo($url);
if (isset($info['extension']))
{
if (($info['extension'] == 'jpg') ||
($info['extension'] == 'jpeg') ||
($info['extension'] == 'gif') ||
($info['extension'] == 'png'))
array_push($images, $url);
}
}
// 반복 입력된 단어 제거
$text = preg_replace("/s(w+s)1/i", "$1", $text);
// 반복 입력된 부호 제거
$text = preg_replace("/.+/i", ".", $text);
// XML/HTML 태그 추출
function get_tag( $tag, $xml ) {
$tag = preg_quote($tag);
preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>.'}',
$xml,
$matches,
PREG_PATTERN_ORDER);
return $matches[1];
}
// 특정 속성을 포함하는 XML/HTML 태그 추출
function get_tag( $attr, $value, $xml, $tag=null ) {
if( is_null($tag) )
$tag = '\w+';
else
$tag = preg_quote($tag);
$attr = preg_quote($attr);
$value = preg_quote($value);
$tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*".
"(['\"])$value\\2[^>]*>(.*?)<\/\\1>/"
preg_match_all($tag_regex,
$xml,
$matches,
PREG_PATTERN_ORDER);
return $matches[3];
}
// 16진수 컬러값 체크
$string = "#555555";
if (preg_match('/^#(?:(?:[a-fd]{3}){1,2})$/i', $string)) {
echo "example 6 successful.";
}
// 웹페이지의 타이틀 추출
$fp = fopen("http://www.catswhocode.com/blog","r");
while (!feof($fp) ){
$page .= fgets($fp, 4096);
}
$titre = eregi("<title>(.*)</title>",$page,$regs);
echo $regs[1];
fclose($fp);
// 아파치 로그 파싱
//Logs: Apache web server
//Successful hits to HTML files only. Useful for counting the number of page views.
'^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)/[^ ?"]+?.html?)??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+"s+(?#status code)200s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$'
//Logs: Apache web server
//404 errors only
'^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+"s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$'
// 겹따옴표를 홑따옴표로 교체
preg_replace('B"b([^"x84x93x94rn]+)b"B', '?1?', $text);
// 비밀번호 완성도 체크
//Tests if the input consists of 6 or more letters, digits, underscores and hyphens.
//The input must contain at least one upper case letter, one lower case letter and one digit.
'\A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}\z'
// WordPress 이미지 표시
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php
$szPostContent = $post->post_content;
$szSearchPattern = '~<img [^>]* />~';
// Run preg_match_all to grab all the images and save the results in $aPics
preg_match_all( $szSearchPattern, $szPostContent, $aPics );
// Check to see if we have at least 1 image
$iNumberOfPics = count($aPics[0]);
if ( $iNumberOfPics > 0 ) {
// Now here you would do whatever you need to do with the images
// For this example the images are just displayed
for ( $i=0; $i < $iNumberOfPics ; $i++ ) {
echo $aPics[0][$i];
};
};
endwhile;
endif;
?>
// 특정 이모티콘을 이미지로 교체
$texte='A text with a smiley :-)';
echo str_replace(':-)','<img src="smileys/souriant.png">',$texte);
RECENT COMMENT