-
# Regular Expressions플밍/PHP+MySQL 2011. 8. 29. 05:27# Regular Expressions
2007/04/23 01:05
PHP 정규표현식 (Regular expression) 정리
글쓴이 : 오렌지블루
출처 : codelib.co.kr , koreaphp.co.kr
작성일 : 2002/03/02 11:54:16이거저거 짜깁기 했음. -_-;
정규표현식은 보통 eregi, eregi_replace, ereg, ereg_replace, 또는 perl 의 함수패턴을
그대로 사용할수 있도록 해놓은 함수 preg_match, preg_split, preg_quote 등의 함수
를 사용한다.
예) 사과라는 문자열을 배라는 문자열로 치환한다.
$string ="이것은 사과 입니다";
ereg_replace("사과","배",$string);
① ^ 와 $ 의 사용의 예
^ 는 문자열이 바로 뒤따라나오는 문자열로 시작 됨을 가리킨다.
예) ^The → The로 시작 하는 문자열
$ 는 문자열의 맨 마지막을 가리킨다.
예) of despair$ → of despair 로 끝나는 문자열
예) ^abc$ → abc로 시작해 abc로 끝나는 경우 이므로 abc 만 해당
② ? . * + 의 사용법? 는 직전의 선행문자 하나에 대응되며, 0~1 개를 의미함.
예) "ab?" 는 a 또는 ab 를 나타낸다.
. 은 임의의 하나의 문자에 대응되며, 1 개를 의미함.
예) "x.z" 는 xyz, xxz, xbz 등이고 xz나 xyyz는 안된다.
* 는 직전의 선행문자 하나에 대응되며, 0~n 개를 의미함.
예) "ab*" 는 a, abc(b가 하나 포함되었으므로 정당), ab, abbbb 등을 말한다.* (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열도 해당됨)
.* (선행문자가 "."이므로 하나 이상의 문자를 포함하는 문자열, 공백 문자열은 안됨)
ab* ('b'를 0번 또는 여러번 포함하므로 a, accc, abb, abbbbbbb 등)
a* ('a'를 0번 또는 여러번 포함하므로 k, kdd, sdfrrt, a, aaaa, abb, 공백문자열 등)
+ 는 직전의 선행문자 하나에 대응되며, 1~n 개를 의미함.
예) "ab+" 는 abc, abbb 등이고 a는 되지 않는다.
③ [], {} 와 () 그리고 |
'[]' 는 [] 안에 존재하는 문자들중 한 문자만을 나타낸다.
예) [abc] 는 a 또는 b 또는 c 중에 한문자를 나타낸다.
[ a-f ] 는 [abcdf] 와 같은 의미. ( '-'는 범위를 나타냄. )[]내에서 ^ 이 선행되면 not을 나타냄
* 문자클래스 * [:클래스이름:] 형식으로 사용
alnum : 알파벳과 숫자
alpha : 알파벳lower : 소문자
upper : 대문자
digit : 10진수
xdigit : 16진수, 0-9, a-f, A-F
punct : 제어문자도 아니고, 알파벳,숫자도 아닌 문자(구두점 기호)
blank : 스페이스나 탭 (시스템에 의존적임)space : 스페이스, 케리지 리턴, 뉴라인, 수직 탭, 폼피드 등 공백문자
cntrl : 아스키코드에서의 127 이상의 문자와 32 이하의 제어문자
(한글의 첫째바이트가 127 이상이므로 제어문자로 취급됨)
print : 아스키코드에서 32에서 126까지의 찍을 수 있는 문자
graph : 스페이스는 제외되고 나머지는 'print' 항목과 같음.
[[:alnum:]]은 [a-zA-Z0-9] 와 같은 의미다.
[[:alpha:]]은 [a-zA-Z] 와 같은 의미다.
문자열 오퍼레이터는 [] 사이에서만 효력을 발휘한다.
그리고 반대의 의미도 가능하다.
[^[:alnum:]] 은 알파벳과 숫자의 조합이 아닌것을 말한다.
[^a-zA-Z0-9] 와 같이 사용될수도 있다.
'{}'는 {} 직전의 선행 문자의 개수를 정하는 것이다.
예) "ab{2}" 는 "abb"를 나타낸다. 즉 b의 개수가 2개를 나타낸다.
"ab{2 ,}" 는 abb, abbbbb 등 b의 개수가 2개 이상을 나타낸다.
"ab{3 , 5}" 는 abbb, abbbb, abbbbb 와 같이 b가 3개에서 5개 까지를 나타낸다.
'()' 는 ()안에 있는 글자들을 그룹화 한다.
예) a(bc)* 는 a, abc abcbc 등 'bc'가 없거나 하나 이상인 경우
a(bc) 는 abcbc 를 나타낸다.
'|' 는 OR 연산자 기능을 한다.
예) "a|b" 는 a 또는 b 둘중 하나를 나타낸다.
④ '\' 위에서 사용된 특수 문자들을 정규식내에서 문자 취급하고 싶을 때
예) filename\.ext → "filename.ext"를 나타냄
[\?\[\\\]] ('?', '[', '\', ']' 중 하나)
⑤ 기초 활용
^[1-9][0-9]*$ 는 자연수
^(0|[1-9][0-9]*)$ 는 0을 포함하는 자연수
^(0|-?[1-9][0-9]*)$ 정수
^[0-9]+(.[0-9]+)?$ 소숫점 표시
^[0-9]+(.[0-9])?$ 소수점 둘째자리 까지
^[0-9]+(.[0-9]{1,2})?$ 소수점 둘째자리나 첫째자리
^[0-9]{1,3}(,[0-9])*(.[0-9]{1,2})?$ 돈의 표시
⑥ 복합활용
# 메일 주소 체킹 (유저명@도메인명)
유저명 : 대문자, 소문자, 숫자 그리고 '.' '-' '_' 을 가질 수있지만 . 로 시작하면 안된다.
[_0-9a-zA-Z-]+(.[_0-9a-zA-Z]+)* ereg 사용할때(case insensitive)
^[_a-z0-9-]+(.[_a-z0-9-]+)*$ eregi 사용할때(case sensitive)
도메인 : 유저명과 기본적으로는 같지만 _ 가 없다.
^[a-z0-9-]+(.[a-z0-9-]+)*$
조합 결과 : ^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
# URL 에 http:// 붙여주기
URL 은 대문자, 소문자, 숫자 ,'.','_','=','&','?','~','@','/','+' 를 사용 할수 있다
즉, http://([0-9a-zA-Z./@~?&=_]+) 가 된다.
$add="www.codelib.co.kr";
$pattern ="([0-9a-zA-Z./@~?&=_]+)";
$link =ereg_replace($pattern, "http://1" $add);
echo ("$link");
의 결과 $link 는 다음처럼 변경 된다. http://www.codelib.co.kr
참고로 1 은 첫번째 괄호안의 값을 말한다. 2는 2번째..'플밍 > PHP+MySQL' 카테고리의 다른 글
php5 에서 cal_days_in_month 작동 안될때 (0) 2011.08.29 # Comparison Operators (0) 2011.08.29 ch4. 문자열 조작과 정규표현 (0) 2011.08.29 ch3. 배열 사용 (0) 2011.08.29 ch2. 데이터 저장과 불러오기 (0) 2011.08.29