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