본문 바로가기

암호학..진로..등등

PHP 정규식

항상 문제를 풀다가 나의 발목을 잡았던 것이 php 정규식이었다. 정규식 해석 사이트에서 해석을 해봐도 내 맘에 들지 않았다. 오늘은 그 문제의 정규식을 공부하기 위해 이 글을 써보고자 한다. 

 

먼저 정규식의 정의부터 알아보자. 모든 공부에선 정의가 제일 중요하다.

 

정규식: 특정한 규칙을 가진 문자열의 집합*을 표현하는 데 사용하는 형식 언어(위키백과)

* 집합: 명확한 기준에 의하여 주어진 서로 다른 대상들이 모여 이루는 새로운 대상

이렇게만 보면 진짜 무슨소리인지 모르겠다. 뭔 말을 이렇게 어렵게 하는거야 예시를 통해 이해해 보도록 하자.

 

[1-3][a-f]{5}

webhacking.kr 이 식을 해석해보면 1~3의 숫자1개와 a~f의 문자 5개로 이뤄진 문자들을 나타내는 식이다. 이 식으로 나타낼 수 있는 문자는 3(숫자 3개)*6(=6C5)==18개를 얻어낼 수 있다. 이 많은 문자들을 대표하는 식으로 보면 된다.(어째 더 어려워진것 같다. 내가 국어를 못해서......ㅠ)

근데 이걸 구성하는 문자는 같지만 순서가 다를때는 다른 경우로 보고 생각을 하면 3(숫자3개)*720(=6P5)==2160개가 되는건데 어느게 맞는건지는 모르겠다. 아시는 분은 아무나 댓글좀....

 

정규식에 사용되는 문자의 종류는 굉장히 많다. 

정규식 표현에 사용되는 문자를 알아보도록 하자.

 

 기호  내용  샘플
 ^  맨 앞에 매칭  예) ^hello
⇒맨 앞에 hello 문자열이 있으면 패턴 매칭.
 $  맨 뒤에매칭  예) hello$
⇒맨 뒤에hello 문자열이 있으면 패턴 매칭.
 .  줄바꿈 이외의 임의의 문자 하나매칭  예) hello.world
⇒hello world 나 hello-world등의 문자열이 있으면 패턴 매칭.
 []  괄호 안에 지정한 문자중 하나의 문자 매칭  예) [abc]
⇒a, b、c 중 하나가 있으면 패턴  매칭.예) r[aeu]d
⇒rad, red、rud 중 하나가  있으면 패턴  매칭.
 [A-Z]  영어 대문자 A-Z중 하나의 문자매칭  예) a[A-Z]c
⇒aAc,aBc,…,aZc 등의 문자열이 있으면 패턴  매칭.
 [a-z]  영어 소문자 a-z중 하나의 문자매칭  예) a[a-z]c
⇒aac,abc,…,azc 등의 문자열이 있으면 패턴  매칭.
 [0-9]  숫자 0-9중 하나의 문자매칭  예) a[0-9]c
⇒a0c,a1c,…,a9c 등의 문자열이 있으면 패턴  매칭.
 [^]  괄호안에 지정한 문자가 포험되지 않은 하나의 문자매칭  예) [^abc]
⇒a、b、c 이외의 문자가 있으면 패턴  매칭.
 *  앞에 작성한 표현을 0회 이상 반복  예)a、ab、abb、abbb 등의 패턴 매칭.
 +  앞에 작성한 표현을 1회 이상 반복  예)ab、abb、abbb 등의 문자열이 있으면 패턴  매칭.
 ?  앞에 작성한 표현을 0회 또는 1회 이상 반복  예) ab?
⇒a 나 ab가 있으면 패턴  매칭.
 {n}  앞에 작성한 표현을 n회 반복  예) ab{2}
⇒abb 가 있으면 패턴  매칭.
 {n,}  앞에 작성한 표현을 n회 이상 반복  예) ab{2,}
⇒abb、abbb 등이 있으면 패턴  매칭.
 {n,m}  앞에 작성한 표현을 n회 부터 m회 까지 반복  예) ab{2,5}
⇒abb,abbb,abbbb,abbbbb이 있으면 패턴  매칭.
 a|b  a 또는 b에 매칭  예) hello|world
⇒hello 또는 world가  있으면 패턴  매칭.
 () 그룹화.
()안에 작성한 패턴과 일치하는 문자열이 있으면 저장했다가 실행이 끝난후 참조 가능하게 함.
 
 가-힣  한글 매칭  예) [가-힣]
⇒한글이 포함되어 있는 경우 매칭

그런데 알긴 알지만 정규식이 어디있는지 모르면 정말 아무곳에도 쓸 수가 없다. php정규식을 찾는 방법을 알려주도록 하겠다. 

 1) 따옴표 안에 슬레시와 함께 존재할때

 2) preg_match라는 문자가 보일때

 

아 여기에 정규식이 쓰였구나. 해석해봐야즹^^ 이 생각하면 된다. 

 

와 진짜 쓰다보니까 머리속에 들어가는거 같기도 하고.... 아닌거 같기도 하고!

다음에는 레인보우 테이블에 대해서 한번 써보도록 하겠다(진짜로! ㄹㅇ 진짜 쓴다). 왜 이렇게 수학이 많이 쓰이는거야

 

안녕!