2016년 1월 31일 일요일

PHP의 정규표현식(Regular Expression)

PHP의 정규표현식

cheat sheet: http://ult-tex.net/info/perl/

PHP의 정규표현식은 구분자로 시작해서 구분자로 끝난다.

      /php/ --->>> '/'가 구분자이다.
                         구분자는 정규표현식과 정규표현식이 아닌 것을 구분해주기 위함이다.
                         
                         '/'대신, '#', '+', '%' 같은 특수기호도 사용가능

      /jsp/i --->>> 'i'는 대소문자를 구분하지 않겠다는 의미

      /body$/m --->>> '$'은 가장 끝의 경계점을 의미한다.
                              'm'은 멀티라인이다.

                              ex) everybody
                                   body
                                   body
                                   Onebody

                                    'm'이 없었으면, 제일 마지막에 있는 One뒤의 body가
                                    선택되지만, 'm'으로 인하여 행 마다 있는 body가 다 선택된다.

\b: 단어의 경계를 의미한다.

      \bweb\b --->>> 'web'이라는 독립된 단어를 가리킨다. 즉, 'web'을 가리킴
                               'webscript'에서도 'web'이 있지만 선택되지 않는다.

\s: 공백을 의미한다.

preg_match()의 리턴 값은, 해당 패턴을 찾았으면 1
                                   찾지 못했으면 0
                                   문법적 에러는 false

capturing: preg_match함수의 결과 값으로 데이터를 따로 대입시키기 위해 '()'로 감싸는 것.

      ex) http://www.naver.com/index.html

            preg_match('/http:\/\/([^/]+)/', subject, result)

                  ([^/]+)로 감싸진, www.naver.com이 따로 결과 값으로 대입된다.

capturing할 때, 괄호 안에 '?:'를 기입하면 결과 값에 데이터가 따로 대입되지 않는다.

      ex) http://www.daum.net/index.html

            preg_match('/^(?:http://)?([^/]+)/', subject, result)

                  '^'는 행의 시작점을 의미한다. 만약 '[]'안에 있으면 Not을 의미
                  
                  가장 처음에 http://가 있는 지 판단하는 데, '?' 때문에 없을 경우와
                  존재한다면 1개만 등장하도록 한다.

                  서브패턴안에 '?:' 있으므로, 'http://'는 결과 값에 따로 대입하지 않는다.

                  즉, 결과 값은 www.daum.net

      ex) www.php.net

            preg_match('/[^.]+\.[^.]+$/', subject, result)

                  '[^.]+\.[^.]+$'의 의미는 $때문에 행의 끝에서 부터 본다.
                  
                  '[^.]+'는 '.'이 아닌 텍스트가 1개 이상인 경우, 즉 'net'

                  '\.'는 '.'을 가리키니까, 즉 net의 앞에 있는 '.'

                  '[^.]+'는 '.'이 아닌 텍스트가 1개 이상인 경우, 즉 'php

                  결과는 php.net

capturing할 때, 괄호 안에 ?P<key>으로 할 경우, 결과 값이 연관배열로 대입된다.

      ex) foobar: 2008

            preg_match('/(?P<name>\w+): (?P<digit>\d+)/', subject, result)

                  '\d'는 숫자를 의미

                  '?P<name>'로 인해, <name> 키 값에 foobar이 밸류로 대입

                  '?P<digit>'로 인해, <digit> 키 값에 2008이 밸류로 대입

                  결과는, [name] => boobar, [digit] => 2008

댓글 없음:

댓글 쓰기

결혼이민비자 신청방법(F-6-1 국민의 배우자)

 제가 일본인 여자친구와 결혼 후, 한국에 귀국하기 위해 신청한 결혼이민비자에 대하여 작성해보도록 하겠습니다. 필자는 일본에서 근무하고 있었으며, 한국에서의 소득은 없었습니다. 결혼이민비자를 신청한 날짜는 2021-04-21 이며, 사증이 발급된 날짜...