정규표현식 의 핵심. 의미있는 메타 문자들 2
대단할것은 없는 강좌이지만,
제 강좌를 출처를 밝히고 외부로 퍼가는 것은 허용하지만,
다른 강좌의 자료나 책의 자료로 사용되거나 부분적인 인용은 허용하지 않습니다.
제 강좌를 출처를 밝히고 외부로 퍼가는 것은 허용하지만,
다른 강좌의 자료나 책의 자료로 사용되거나 부분적인 인용은 허용하지 않습니다.
강좌는 php 5. 대를 기준으로 하며, PCRE (펄과 호환 되는 정규표현식)을 다룹니다.
PCRE 는 preg_ 로 시작되는 내장함수와 함께 사용되어지는 정규표현식을 말합니다.
PCRE 는 preg_ 로 시작되는 내장함수와 함께 사용되어지는 정규표현식을 말합니다.
PCRE > 정규표현식 의 핵심. 의미있는 메타 문자들 2
이전 내용에서는 정규표현식의 메타문자인 ^, $, . 에 대해서 알아보았습니다.
이번 내용에서도 역시 정규표현식의 핵심이라고 볼수 있는 의미 있는 메타 문자에 대해서 이어서 알아보도록 하겠습니다.
4. ?
이것은 바로 앞의 문자나 문자열이 없거나 또는 하나만 있거나 를 뜻합니다.
사용자로부터 어떤 URL 을 입력 받았을때 제대로된 URL인지 아닌지 판별 할때 주로 많이 쓰입니다.
http://apmusers.com/ 또는 https://apmusers.com/
http:// 도 될수 있고 https:// 도 사용가능한 URL 일 경우와 같은 곳에 사용됩니다.
예제8> test8.php
<?php
$string = 'http://apmusers.com/';
if (preg_match('@^https?://@', $string)) {
echo '<font color="blue">' . $string . ' 은 사용가능 한 URL 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 사용가능 하지 않는 URL 입니다.</font><br />' . PHP_EOL;
}
$string = 'https://apmusers.com/';
if (preg_match('@^https?://@', $string)) {
echo '<font color="blue">' . $string . ' 은 사용가능 한 URL 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 사용가능 하지 않는 URL 입니다.</font><br />' . PHP_EOL;
}
$string = 'mms://apmusers.com/';
if (preg_match('@^https?://@', $string)) {
echo '<font color="blue">' . $string . ' 은 사용가능 한 URL 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 사용가능 하지 않는 URL 입니다.</font><br />' . PHP_EOL;
}
$string = 'test.jpg';
if (preg_match('@\.jpe?g$@', $string)) {
echo '<font color="blue">' . $string . ' 은 확장자가 jpg 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 확장자가 jpg 가 아닙니다.</font><br />' . PHP_EOL;
}
$string = 'test.jpeg';
if (preg_match('@\.jpe?g$@', $string)) {
echo '<font color="blue">' . $string . ' 은 확장자가 jpg 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 확장자가 jpg 가 아닙니다.</font><br />' . PHP_EOL;
}
$string = 'test.gif';
if (preg_match('@\.jpe?g$@', $string)) {
echo '<font color="blue">' . $string . ' 은 확장자가 jpg 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 확장자가 jpg 가 아닙니다.</font><br />' . PHP_EOL;
}
?>
$string = 'http://apmusers.com/';
if (preg_match('@^https?://@', $string)) {
echo '<font color="blue">' . $string . ' 은 사용가능 한 URL 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 사용가능 하지 않는 URL 입니다.</font><br />' . PHP_EOL;
}
$string = 'https://apmusers.com/';
if (preg_match('@^https?://@', $string)) {
echo '<font color="blue">' . $string . ' 은 사용가능 한 URL 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 사용가능 하지 않는 URL 입니다.</font><br />' . PHP_EOL;
}
$string = 'mms://apmusers.com/';
if (preg_match('@^https?://@', $string)) {
echo '<font color="blue">' . $string . ' 은 사용가능 한 URL 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 사용가능 하지 않는 URL 입니다.</font><br />' . PHP_EOL;
}
$string = 'test.jpg';
if (preg_match('@\.jpe?g$@', $string)) {
echo '<font color="blue">' . $string . ' 은 확장자가 jpg 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 확장자가 jpg 가 아닙니다.</font><br />' . PHP_EOL;
}
$string = 'test.jpeg';
if (preg_match('@\.jpe?g$@', $string)) {
echo '<font color="blue">' . $string . ' 은 확장자가 jpg 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 확장자가 jpg 가 아닙니다.</font><br />' . PHP_EOL;
}
$string = 'test.gif';
if (preg_match('@\.jpe?g$@', $string)) {
echo '<font color="blue">' . $string . ' 은 확장자가 jpg 입니다.</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 확장자가 jpg 가 아닙니다.</font><br />' . PHP_EOL;
}
?>
결과 :
http://apmusers.com/ 은 사용가능 한 URL 입니다.
https://apmusers.com/ 은 사용가능 한 URL 입니다.
mms://apmusers.com/ 은 사용가능 하지 않는 URL 입니다.
test.jpg 은 확장자가 jpg 입니다.
test.jpeg 은 확장자가 jpg 입니다.
test.gif 은 확장자가 jpg 가 아닙니다.
https://apmusers.com/ 은 사용가능 한 URL 입니다.
mms://apmusers.com/ 은 사용가능 하지 않는 URL 입니다.
test.jpg 은 확장자가 jpg 입니다.
test.jpeg 은 확장자가 jpg 입니다.
test.gif 은 확장자가 jpg 가 아닙니다.
※ 위의 예제 패턴 중 @\.jpe?g$@ 이런것이 있습니다. . 앞에 \ 가 붙어있습니다.
이전 내용에서도 설명하였듯이 정규식 패턴에서 . 은 '아무 문자나 하나' 라는 의미를 같는 메타 문자입니다.
물론 @.jpe?g$@ 이렇게만 썻을 경우에도 확장자가 jpg 인것을 찾을 수는 있지만, testajpg 또는 test!jpg 같은 것도 확장자가 jpg 인것 처럼 인식 합니다.
따라서 완전한 . 을 찾기 위해서는 역슬러쉬(\) 를 사용하여 에스케이프(해당 메타문자가 정규식에서 가지는 의미를 해제) 시켜주어야 합니다.
다시 한번 설명하면, 어떤 찾고자 하는 문자가 정규식의 메타 문자중 하나라면 역슬러쉬를 사용 하여 에스케이프 시켜서 사용한다. 입니다.
이전 내용에서도 설명하였듯이 정규식 패턴에서 . 은 '아무 문자나 하나' 라는 의미를 같는 메타 문자입니다.
물론 @.jpe?g$@ 이렇게만 썻을 경우에도 확장자가 jpg 인것을 찾을 수는 있지만, testajpg 또는 test!jpg 같은 것도 확장자가 jpg 인것 처럼 인식 합니다.
따라서 완전한 . 을 찾기 위해서는 역슬러쉬(\) 를 사용하여 에스케이프(해당 메타문자가 정규식에서 가지는 의미를 해제) 시켜주어야 합니다.
다시 한번 설명하면, 어떤 찾고자 하는 문자가 정규식의 메타 문자중 하나라면 역슬러쉬를 사용 하여 에스케이프 시켜서 사용한다. 입니다.
5. *
이것은 바로 앞의 문자나 문자열이 없어도 되고 하나 이상 있어도 된다 를 뜻합니다.
예제9> test9.php
<?php
$string = 'abcdefg';
if (preg_match('@cd*e@', $string, $matches)) {//d가 하나, 중간에 붙엇음
echo '<font color="blue">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
$string = 'cddddddefg';//d가 여러개, 앞에 붙엇음
if (preg_match('@cd*e@', $string, $matches)) {//d가 하나
echo '<font color="blue">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
$string = 'aaaabce';//d가 빠짐, 뒤에 붙엇음
if (preg_match('@cd*e@', $string, $matches)) {//d가 하나
echo '<font color="blue">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
?>
$string = 'abcdefg';
if (preg_match('@cd*e@', $string, $matches)) {//d가 하나, 중간에 붙엇음
echo '<font color="blue">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
$string = 'cddddddefg';//d가 여러개, 앞에 붙엇음
if (preg_match('@cd*e@', $string, $matches)) {//d가 하나
echo '<font color="blue">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
$string = 'aaaabce';//d가 빠짐, 뒤에 붙엇음
if (preg_match('@cd*e@', $string, $matches)) {//d가 하나
echo '<font color="blue">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd*e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
?>
결과 :
abcdefg 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> cde
cddddddefg 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> cdddddde
aaaabce 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ce
cddddddefg 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> cdddddde
aaaabce 은 @cd*e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ce
※ if 는 () 조건이 참(true)일 경우에만 어떤 행위를 하는 프로그램의 제어구조 입니다.
그런데 참(true) 으로 인식하는 것이 굉장히 유연합니다.
다음과 같은 경우는 전부 거짓(false) 으로 인식하고, 거짓이 아닌 모든 경우는 모두 참(true) 으로 인식합니다.
"" --> 빈문자열
0 --> 정수
00.0 -> 소수 0.0
"0" --> 문자 0
NULL
FALSE
배열이 키도 없고 값도 없는 빈 배열일 경우
변수가 값이 없는 빈 변수일 경우
※ preg_match 를 이전에 설명할때 세번째 인자를 사용 하게 되면 함수 실행 결과값을 배열로 돌려준다 고 하였습니다.
if (preg_match('@cd*e@', $string, $matches)) 에서도 보면, preg_match('@cd*e@', $string, $matches) 의 실행 결과는 배열 입니다.
즉, if (배열) 인 경우 인데, 배열이 비었으면 거짓이라서 else 로 넘어가고, 배열이 비지 않았다면 실행됩니다.
따라서 $matches[0] 에 매치되는 문자열이 담겨 있다면 실행 되는 것입니다.
그런데 참(true) 으로 인식하는 것이 굉장히 유연합니다.
다음과 같은 경우는 전부 거짓(false) 으로 인식하고, 거짓이 아닌 모든 경우는 모두 참(true) 으로 인식합니다.
"" --> 빈문자열
0 --> 정수
00.0 -> 소수 0.0
"0" --> 문자 0
NULL
FALSE
배열이 키도 없고 값도 없는 빈 배열일 경우
변수가 값이 없는 빈 변수일 경우
※ preg_match 를 이전에 설명할때 세번째 인자를 사용 하게 되면 함수 실행 결과값을 배열로 돌려준다 고 하였습니다.
if (preg_match('@cd*e@', $string, $matches)) 에서도 보면, preg_match('@cd*e@', $string, $matches) 의 실행 결과는 배열 입니다.
즉, if (배열) 인 경우 인데, 배열이 비었으면 거짓이라서 else 로 넘어가고, 배열이 비지 않았다면 실행됩니다.
따라서 $matches[0] 에 매치되는 문자열이 담겨 있다면 실행 되는 것입니다.
6. +
이것은 바로 앞의 문자나 문자열이 하나 이상 있다 를 뜻합니다.
예제10> test10.php
<?php
$string = 'abcdefg';
if (preg_match('@cd+e@', $string, $matches)) {//d가 하나, 중간에 붙엇음
echo '<font color="blue">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
$string = 'cddddddefg';//d가 여러개, 앞에 붙엇음
if (preg_match('@cd+e@', $string, $matches)) {//d가 하나
echo '<font color="blue">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
$string = 'aaaabce';//d가 빠짐, 뒤에 붙엇음
if (preg_match('@cd+e@', $string, $matches)) {//d가 하나
echo '<font color="blue">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
?>
$string = 'abcdefg';
if (preg_match('@cd+e@', $string, $matches)) {//d가 하나, 중간에 붙엇음
echo '<font color="blue">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
$string = 'cddddddefg';//d가 여러개, 앞에 붙엇음
if (preg_match('@cd+e@', $string, $matches)) {//d가 하나
echo '<font color="blue">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
$string = 'aaaabce';//d가 빠짐, 뒤에 붙엇음
if (preg_match('@cd+e@', $string, $matches)) {//d가 하나
echo '<font color="blue">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> ' . $matches[0] . '</font><br />' . PHP_EOL;
}
else {
echo '<font color="red">' . $string . ' 은 @cd+e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.</font><br />' . PHP_EOL;
}
?>
결과 :
abcdefg 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> cde
cddddddefg 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> cdddddde
aaaabce 은 @cd+e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.
cddddddefg 은 @cd+e@ 패턴에 매치되는 문자열을 포함한 문자열 입니다. --> cdddddde
aaaabce 은 @cd+e@ 패턴에 매치되는 문자열을 포함하지 않는 문자열 입니다.
댓글 11개
12년 전
감사합니다. 내용정리가 잘 되어 있는 강좌군요.
12년 전
네에 감사합니다.
미운오리스키
12년 전
잘 봤습니다.. 감사합니다 ^^
12년 전
네 고맙습니다.
12년 전
유창화님에게 늘 감사합니다.
출처 남기고 강좌좀 제대로 퍼가야 겠네요.^^
너무 좋아요.
출처 남기고 강좌좀 제대로 퍼가야 겠네요.^^
너무 좋아요.
12년 전
네 감사합니다 ^^
12년 전
앗~ 두번째가 올라왔군요....ㅎㅎ
12년 전
ㅎㅎ 네 어제 올렸습니다.
ohora
12년 전
감사합니다.
12년 전
네 고맙습니다.
takumi22
12년 전
감사합니다. 잘 읽었습니다.
게시글 목록
| 번호 | 제목 |
|---|---|
| 5722 | |
| 31534 | |
| 5717 | |
| 19190 |
JavaScript
레이어팝업 스크립트 문의
1
|
| 19181 |
기타
vi로 URL 열기
8
|
| 19177 |
JavaScript
1원짜리팁 현재 사이트 쿠키 알아내기
3
|
| 19173 |
JavaScript
1원짜리팁 자바스크립트로 좌우 공백 제거구현하기
3
|
| 19171 | |
| 27353 | |
| 19169 | |
| 24530 | |
| 27350 | |
| 19161 | |
| 19159 | |
| 19156 | |
| 19154 |
PHP
캐쉬 삭제
1
|
| 19152 | |
| 19150 |
PHP
절댓값 리턴 함수
1
|
| 19147 |
JavaScript
자동 스크롤바 사용하기
2
|
| 19145 |
JavaScript
일주기 시간대별로 플래시무비 자동 교체시키기
1
|
| 19143 |
JavaScript
TEXTATEA 창늘리기~
1
|
| 19141 | |
| 30830 | |
| 19135 |
jQuery
상단 가운데 정렬 , 스크롤시 상단에 고정...
5
|
| 19129 | |
| 19124 |
jQuery
제이쿼리 효과2입니다.
4
|
| 19118 |
jQuery
제이쿼리 fadein 효과
5
|
| 19115 | |
| 19111 |
JavaScript
페이스북 댓글창, 좋아요 달기
3
|
| 19108 |
PHP
IP중간 * 표시 하기
2
|
| 19104 |
JavaScript
글자 깜박임 blink 익스에서 구현
3
|
| 19101 | |
| 19098 | |
| 19094 |
JavaScript
select선택에따른추가select동적으로보여주기
3
|
| 27342 | |
| 19093 | |
| 26548 | |
| 19090 | |
| 19088 |
JavaScript
두 종류의 메뉴셋 사용시 메뉴선택 표시 문제
1
|
| 19086 | |
| 24524 | |
| 31526 | |
| 26539 | |
| 32021 | |
| 32015 | |
| 5705 | |
| 26533 |
견적서
견적서의뢰 ....
5
|
| 24510 | |
| 26524 | |
| 24507 | |
| 24506 | |
| 19082 | |
| 24498 | |
| 5702 | |
| 27337 | |
| 32011 | |
| 19080 | |
| 19075 | |
| 19073 | |
| 19072 |
JavaScript
도와주세요~
|
| 27330 | |
| 27328 | |
| 32010 | |
| 32005 | |
| 32001 | |
| 19071 |
JavaScript
자바스크립트 입문자인데..이미지 변경 스크립트..좀 도와주세여
|
| 19063 |
jQuery
list sort에 좋은것
7
|
| 31998 | |
| 31994 | |
| 5676 | |
| 27327 | |
| 31989 | |
| 5671 | |
| 5666 | |
| 19056 |
jQuery
참 좋은 이미지 슬라이딩 라이브러리
6
|
| 31988 | |
| 31987 | |
| 31981 | |
| 26515 |
계약서
홈페이지 제작 계약서
8
|
| 30823 | |
| 19050 |
Mobile
모바일로 접속했는지 확인하기.,
5
|
| 19047 | |
| 19039 |
MySQL
트리거 사용법에 관하여..
7
|
| 31969 | |
| 5649 | |
| 27323 | |
| 31963 | |
| 19027 | |
| 19020 | |
| 19017 | |
| 19014 | |
| 19009 |
PHP
페이스 댓글, 좋아요 달기
4
|
| 19005 |
JavaScript
페이스북 댓글창 좋아요 달기
3
|
| 31949 | |
| 18998 |
PHP
문자열 자르기 입니다.
6
|
| 18994 |
PHP
정규식에 관한 내용입니다.
3
|
| 18988 |
PHP
우분투서버 셋팅버입니다
5
|
| 18982 |
PHP
js, php 배열 연결
5
|
| 31941 | |
| 31934 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기