메뉴 건너뛰기

프로그램언어

2021.03.26 13:59

정규표현식

조회 수 311 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

정규표현식을 자주 쓰진 않지만, 그래도 필요할때는 꼭 있다. 그런데 가끔쓰다 보니, 쓸때마다 찾아다니고, 어떤식으로 쓰는지도 다시 기억해 내고 하는게 짜증나서, 간단한 정리를 해보려고 했다.
하지만, 역시 간단한 정리조차.. 너무 양이 많아서..(괜히 책한권이 아닌거다..) 그냥 관련 링크만 정리해놓았다.

아래의 링크들은 PHP관련 정규표현식 링크이다.

기본 개념 http://php.net/manual/kr/regexp.reference.php
(2012.04.25추가 : 원래는 해당 페이지에 기본개념이 어느정도 있었는데, 이번에 확인해 보니 내용 분류가 조금 바뀌었다. 위 페이지에 들어가서 좌측 인덱스의 Introduction 아래 링크들을 하나씩 클릭해보기 바란다.)

패턴병경자 http://www.php.net/manual/kr/reference.pcre.pattern.modifiers.php
( 예 : "/\xf8/u" 에서 "u"를 패턴병경자라고 한다. )

함수목록 http://www.php.net/manual/kr/ref.pcre.php
( php에서 정규 표현식의 함수는 거이 preg_ 로 시작한다.)

//------------- 추가 2013.06.20
위의 글들이 예전엔 전부 한글이었는데, 해당 웹페이지의 사소한 개편이 있었는지.. 영어로 된 부분들이 많아서.... 대략적인 설명글을 가져왔다.(출처를 적고 싶은데, 어디서 복사해놨던건지 모르겠다...)
 

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./@~?&=_]+) 가 된다. 


기본적인 것들은 이글만으로도 상당히 도움이 될 것이다.



기타 - 주로 쓰이는 정규표현식

숫자만 가능 : [ 0 ~ 9 ] 주의 : 띄어쓰기 불가능
/^[0-9]+$/
 
 이메일 형식만 가능
/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/
 
한글만 가능 : [ 가나다라 ... ] 주의 : ㄱㄴㄷ... 형식으로는 입력 불가능 , 띄어쓰기 불가능
/^[가-힣]+$/
 
한글,띄어쓰기만 가능 : [ 가나다라 ... ] 주의 : ㄱㄴㄷ... 형식으로는 입력 불가능 , 띄어쓰기 가능
/^[가-힣\s]+$/
 
영문만 가능 :
/^[a-zA-Z]+$/
 
 영문,띄어쓰기만 가능
/^[a-zA-Z\s]+$/
 
전화번호 형태 : 전화번호 형태 000-0000-0000 만 받는다. ]
/^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/
 
도메인 형태, http:// https:// 포함안해도 되고 해도 되고
/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
 
도메인 형태, http:// https:// 꼭 포함
/^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
 
도메인 형태, http:// https:// 포함하면 안됨
/^[^((http(s?))\:\/\/)]([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
 
한글과 영문만 가능
/^[가-힣a-zA-Z]+$/;
 
숫자,알파벳만 가능
/^[a-zA-Z0-9]+$/;
 
주민번호, -까지 포함된 문자열로 검색
/^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$/

List of Articles
번호 제목 날짜 조회 수
300 mysql_free_result(); 관련 오류 2021.03.25 288
299 [PHP기초] 함수와 객체의 비교 2021.03.27 290
298 PHP웹 보안 취약점 TOP5(웹해킹) 2023.01.12 292
297 비교연산자 ( === 에 관해서 ) 2021.03.25 307
296 콜론 연산자 2021.03.26 307
295 PHP Notice: Use of undefined constant ... assumed ... 오류 2021.03.26 307
294 확장자 추출 하기 2021.03.26 309
» 정규표현식 2021.03.26 311
292 PHP와 HTML과 자바스크립트의 관계 2021.03.26 311
291 쿠키 확인 후 만료시 세션 파괴하는 방법 2020.11.23 314
290 문자열 함수 모음 2021.03.26 318
289 특정일의 주차 구하기 2021.07.08 322
288 TIFF, GIF 여러장 변환 file 2021.03.26 323
287 curl을 이용하여 post, get 방식 으로 데이터 전송하기 2023.01.12 328
286 복권 번호 뽑기 2021.03.26 338
285 php 암호화 복호화 , 간단한 암호화 2023.01.12 358
284 AJAX로 해당 페이지에서 COOKIE 사용하기 2021.03.26 359
283 HEREDOC <<< ( PHP에서 echo로 HTML쉽게 표시하기 ) 2021.03.26 371
282 문자,숫자 랜덤 출력 2021.03.26 404
281 php date 날짜 관련 함수 file 2021.03.27 411
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 17 Next
/ 17

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved