반응형

정규표현식 기초 1        gnuParser





 

1. 위 이미지 처럼 패턴은 패턴구분자(pattern delimiter)와 패턴(pattern) 

    그리고 다시 패턴구분자로 감싸주고 경우에 따라 패턴변경자(pattern modifier)      를 두기도 합니다.



2. 패턴구분자는 여러 문자가 가능합니다. 

    그 중 많이 사용하는 문자는 슬래시(/)입니다만

    여기 파싱기에서는 샾(#)을 패턴구분자로 사용하였습니다.



3. 패턴변경자는 i,m,g,s,x,U 등 다양한데 각 문자는 메타문자로 문자 그 자체가

    아니라 각각 정규표현식에서 약속된 의미를 가지고 있습니다.

   

    1) 는 대소문자를 구분하지 않겠다는 의미


    2) m 은 multiline 즉 개행문자(\n)를 기준으로 여러 줄로 나누어 

        각 줄마다 시작(^), 끝($)을 인식하게 함


    3) s 는 패턴의 점 메타문자는 뉴라인(\n)을 포함하는 모든 문자를 인식함. 

        지정하지 않으면, 뉴라인은 제외된다.


    4) x 는 패턴 내의 공백을 무시하고 패턴 내에 코맨트를 가능하게 한다.

        x패턴변경자를 사용하고자 한다면 공백문자를 \s로 처리해 줘야 한다.


 

    5) u 는 UTF8 지원 (정규식에 한글 사용 가능)


    


    6) U 는 Ungreedy(탐욕스럽지 않은) 패턴이 되풀이 반복되는 문자열이 있을 수

         있는데 최소한만을 취한다.



4. 정규표현식에 대한 더 많은 내용은 다음을 참조하세요.

    참고로 PHP는 PCRE (펄perl언어 호환 정규표현식) 방식을 사용합니다.


    http://navycolor.com/bbs/board.php?bo_table=parserreadme&wr_id=13




정규표현식 기초 2        gnuParser 


1. 메타문자( 정규표현식에서 부여된 의미를 갖는 문자)


     1) ^x : x로 시작하는 문자열

          ex) $str = " hello world";

                $pattern = "#^hello#";

                찾고자 하는 문자열과 패턴이 위와 같다면 문자열 앞에 공백이 있으므로

                패턴과 일치하는 부분이 없는 문자열이 된다.


     2) x$ : 바로 앞 문자 x로 끝나는 문자열

          ex) 만약 문자열이 엔터키로 줄바꿈이 있더라도 문자열 마지막을 체크한다.

                그렇지 않고 줄 마다 그 끝을 체크할려면 패턴구분자로 m을 두면 된다.


     3) .  : 점은 임의의 한 문자를 나타낸다.


     4) x: +는 바로 앞 문자인 x가 한개 이상 되풀이

           ex) x , xx , xxx 등


     5) x? : ?는 바로 앞 문자가 없거나 있는 경우


     6) x* : *는 바로 앞 문자가 0개 이상 되풀이

           ex) x가 없거나 x, xx, xxx 등


     7) x​|y : x 또는 y


     8) (x) : 괄호 안을 그룹화 한다. 예를 들어  Group #1


     9) (x)(y) : 각각을 그룹화하여 인덱싱화 한다. 예를 들어 Group #1, Group #2


     10) (x)(?:y) : y에 해당하는 패턴을 갖는 것이 반듯이 있어야 하지만 인덱싱해서

                          사용하지는 않고자 할 때 괄호 안 맨 앞에 ?:을 붙인다.


     11) x{n} : 바로 앞 x가 딱 n번 되풀이

             ex) xyz{3} 은 xyzzz


     12) x{n,} : 바로 앞 x가 n번 이상 되풀이

            ex) xyz{3,} 은 xyzzz 또는 xyzzzz , xyzzzzz 등


     13) x{n,m} : n번 이상 m번 이하 되풀이

             ex) xyz{3,5} 는 xyzzz , xyzzzz, xyzzzzz 


     14) [xy] : x, y 중 하나

             ex) xy[ab]z 는 xyaz 또는 xybz


     15) [^xy] : x, y를 제외한 문자 하나

             ex) xy[^ab]z 는 xycz , xyfz 등


     16) [x-z] : x부터 z까지 문자 하나와 매칭된다.

             ex) ab[x-z]c 는 abxc , abyc , abzc


     17) \b : word boundary 문자와 공백 사이의 문자를 찾는다.

                    단어의 경계 즉 단어의 시작과 끝에서 찾는다.


            ex) $str = "Hello world weal";

                  $pattern = "#\b(.+)\b#"; 결과값: world weal

                  $pattern2 = "#\b(w.+d)\b#"; 결과값: world


     18) \B : 문자와 공백 사이가 아닌 문자를 찾는다.


     19) \d : 숫자 하나에 해당

             ex) ab\dcd 는 ab3cd , ab1cd , ab8cd 등


     20) \D : 숫자 아닌 것 하나에 해당


     21) \s : 공백문자 하나에 해당


     22) \S : 공백문자 아닌 것 하나에 해당


     23) \t : 탭문자


     24) \v : vertical tab 문자


     25) \w : 알파벳, 숫자, _(언더스코어)


     26) \W : 알파벳, 숫자, _ 이 아닌 문자



반응형
폰박사