Contents

Develop
2013.04.23 14:36

[php] 정규표현식 간단히 정리

조회 수 6585 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
PHP 정규표현식 정리   

글쓴이 : 오렌지블루
작성일 : 2002/03/02 11:54:16
글내용 :
정규표현식이라고 불리우는 Regular expression 에 대한 phpbuilder.com 의 포럼부분 을 토대로 첨삭된 문서이다. 대부분의 프로그래밍에서 많이 필요로 하는 정규표현식 의 간략한 문법에 대해 소개하고 있다.

-------------------------------------------------------------------------------- 
정규표현식 (Regular Expression) 

정규표현식은 문자열의 일정한 패턴을 찾던지 치환하여 주는 기능을 가지고 있다. 
메일 주소검사라던지, 소수점 몇째자리 까지 끊어서 보여주기 등.. 더욱더 복잡한 
문자열도 이 정규표현식으로 처리할수 있다.... 
이는 프로그램시에 많은 일을 쉽게 처리하여 준다 (대부분 내장함수에도 있네요...) 
특히 웹에서는 폼값을 처리할때 특정폼의 형식이 원하는 형식에 맞는지 검사할때 
많이 쓰일수 있다. 정규표현식은 거의 모든 언어에서 지원하지만 사용법은 조금씩 
다르다. 하지만 크게 다르지 않으므로 익혀놓으면 많은 도움이 되리라 생각된다. 

**아래의 글은 몇가지 문서를 참고하였으며 정규표현식의 모든것을 포함하지는 
않는다. (기본은 phpbuilder.com의 컬럼란의 내용이다) 
============================================ 
편의상 반말을 한것에 대하여 양해를 구합니다. 
============================================ 

정규표현식은 보통 eregi, eregi_replace, ereg, ereg_replace, 또는 perl 의 함수패턴을 
그대로 사용할수 있도록 해놓은 함수 preg_match, preg_split, preg_quote 등의 함수 
를 사용한다. (아마 perg 는 php 버전이 3.0.9 이상에서 사용가능할겁니다) 

예) 사과라는 문자열을 배라는 문자열로 치환한다. 
$string ="이것은 사과 입니다"; 
ereg_replace("사과","배",$string); 


1. ^ 와 $ 의 사용의 예 

'^' 는 바로 문자뒤의 문자열로 시작 됨을 가르킨다. 
"^The" : 는 "The"로 시작 하는 문자를 말한다. 

'$' 는 문자열의 맨 마지막을 가르킨다. 
"of despair$" : 는 "of despair"로 끝나는 문자열이다. 

"^abc$" : 는 hello로 시작해 hello로 끝나는 경우 이므로 "abc" 만 해당된다.. 


2. '.' '*' '+' '?' 의 사용법 

'.' 은 어떤 문자든지 임의의 한문자를 말한다.꼭 하나의 문자가 있어야 한다. 
예) "x.z" 는 xyz, xxz, xbz 등이고 xz난 xyyz는 안된다. 

'*' 는 바로 앞의 문자가 없거나 하나 이상의 경우를 말한다. 
예) "ab*" 는 a, abc, ab, abbbb 등을 말한다. 

'+' 는 바로 앞의 문자를 나타내면 꼭 1나 이상이어야 한다. 
예) "ab+" 는 abc, abbb 등이고 a는 되지 않는다. 

'?' 는 바로 앞의 한문자가 있거나 없는것을 말한다. 단지 한문자 만이어야 한다. 
예) "ab?" 는 a 또는 ab 를 나타낸다. 


3. [], {} 와 () 그리고 | 

3-1 '[]' 는 [] 안에 존재하는 문자들중 한 문자만을 나타낸다. 
예) [abc] 는 a 또는 b 또는 c 중에 한문자를 나타낸다. 여기서 '-'를 사용할땐 범위를 나타낸다. 
즉 [ a-f ] 는 [abcdf] 와 같은것을 나타낸다. 
문자클래스 오퍼레이터라는 것에 대해 잠시.. 
유사한 성격의 문자들을 사용자가 알아보기 쉽게 단어로 그룹을 지었다고 보면 된다. 

alnum : 알파벳과 숫자 
alpha : 알파벳 
blank : 스페이스나 탭 (시스템에 의존적임) 
cntrl : 아스키코드에서의 127 이상의 문자와 32 이하의 제어문자 
(한글의 첫째바이트가 127 이상이므로 제어문자로 취급됨 :() 
digit : 숫자 
graph : 스페이스는 제외되고 나머지는 'print' 항목과 같음. 
lower : 소문자 
print : 아스키코드에서 32에서 126까지의 찍을 수 있는 문자 
punct : 제어문자도 아니고 알파벳.숫자도 아닌 문자 
space : 스페이스, 케리지 리턴, 뉴라인, 수직 탭, 폼피드 
upper : 대문자 
xdigit : 16진수, 0-9, a-f, A-F 

[[:alnum:]]은 [a-zA-Z0-9] 와 같은 의미다. 
[[:alpha:]]은 [a-zA-Z] 와 같은 의미다. 
문자열 오퍼레이터는 [] 사이에서만 효력을 발휘한다. 
그리고 반대의 의미도 가능하다. 
[^[:alnum:]] 은 알파벳과 숫자의 조합이 아닌것을 말한다. 
[^a-zA-Z0-9] 와 같이 사용될수도 있다. 



'3-2 {}'는 {} 앞에 있는 문자나 문자열의 개수를 정하는 것이다. 

예) "ab" 는 "abb"를 나타낸다. 즉 b의 개수가 2개를 나타낸다. 
"ab{2,}" 는 abb, abbbbb 등 b의 개수가 2개 이상을 나타낸다. 
"ab{3,5}" 는 abbb, abbbb, abbbbb 와 같이 b가 3개에서 5개 까지를 나타낸다. 


3-3 '()' 는 ()안에 있는 글자들을 그룹화 한다. 

예) a(bc)* 는 a, abc abcbc 등 'bc'가 없거나 하나 이상인 경우이다. 
"a(bc)" 는 abcbc 를 나타낸다. 


3-4 '|' 는 OR 연산자 기능을 한다. 

"a|b" 는 a 또는 b 둘중 하나를 나타낸다. 

참고할것은 기호인데 이것은 . (, ) 등 단지 다음에 오는것이 문자라는것을 
의미한다. 어떤한 처리도 없이 문자로만 인식한다. 
{1,3} 하고 하면 {1,3} 와는 다르다. 

4. 기초 활용 

"a(bc)*" 는 a라는 문자를 포함하고 bc라는 문자열이 없거나 계속반복되는 문자열이다. 
이것은 a, abc ,abcbc abcbcbc.... 등의 문자열을 의미한다. 

"a(bc){1,5}" 는 a 라는 문자를 포함하고 bc 라는 문자를 묶은 형태인데. bc 라는 문자가 
한번에서 5번까지를 말한다. --말이 더 어렵다.... 
이것은 abc,abcbc,abcbc,abcbcbc,abcbcbcbc,abcbcbcbcbc 의 문자열을 의미한다. 

^[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})?$ 돈의 표시... 
(센트까지 표시가능 예 2,200.20 : 이천이백이십센트 또는 이천이백이십전 맞나?) 

5. 복합활용 

5-1 메일 주소 체킹.. 

5-1-1 : 유저명@도메인명 

유저명 : 대문자, 소문자, 숫자 그리고 '.' '-' '_' 을 가질 수있지만 . 로 시작해서는 안된다. 
[_0-9a-zA-Z-]+(.[_0-9a-zA-Z]+)* 
이때에는 eregi 를 사용할때까 아닌 ereg 를 사용할때이다. eregi 함수는 대소문자구분이 없다. 
^[_a-z0-9-]+(.[_a-z0-9-]+)*$ eregi 함수를 사용할때... 

5-1-2 : 도메인 : 유저명과 기본적으로는 같지만 _ 가 없다. 
^[a-z0-9-]+(.[a-z0-9-]+)*$ 

5-1-3 : 메일 주소 체킹 
위의 것의 조합이다. 

^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$ 

5-2 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번째.. 

몇가지 복잡한 정규표현식을 풀다보면 이해하는데 도움이 될것이다 '   

[출처] koreaphp.co.kr


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
407 Develop [asp] 문자열 관련 함수 요약 hooni 2013.04.23 7917
406 Develop [asp] 문자열 넘겨받기 (get,post) hooni 2013.04.23 8860
» Develop [php] 정규표현식 간단히 정리 hooni 2013.04.23 6585
404 System/OS [linux] 콘솔 기본언어 설정 방법 hooni 2013.04.23 13136
403 Develop [js] selectbox 선택 후 input 박스에 적용 hooni 2013.04.23 8404
402 Develop [ajax] 이벤트 코드 생성기 작업중.. ㅋㅋ file hooni 2013.04.23 7257
401 System/OS [sql] 중복데이터 삭제 쿼리 hooni 2013.04.23 15067
400 System/OS [sql] 조회구문(select)에서 중복 데이터를 한 번만 출력 (distinct) 1 hooni 2013.04.23 34383
399 Develop [php] 날짜 정보 출력 (년,월,일,시,분,초) hooni 2013.04.23 10691
398 Develop [c] KNN(K-nearest neighbor) 패턴인식 과제.. file hooni 2013.04.23 7469
397 Develop [c] 베이지언(Bayesian) 패턴인식 과제 ㅋㅋ file hooni 2013.04.23 7182
396 Develop [js] php의 number_format() 함수와 같은.. ㅋㅋ hooni 2013.04.23 6997
Board Pagination Prev 1 ... 60 61 62 63 64 65 66 67 68 69 ... 98 Next
/ 98