위치와 이스케이핑
^who -> 맨 앞 who 찾기
who$ -> 맨 뒤 who 찾기
$ -> $ 찾기
^$ -> 맨 앞 $ 찾기
$$ -> 맨 뒤 $ 찾기
-> 찾기
모든 문자 그룹
. -> 어떠한 문자 모두를 가리킴
...... -> 문자 6덩어리를 가리킴
. -> . 찾기
... -> .(any character). 찾기
특정 문자 범위
[oyu] -> o or y or u 찾기
[dH]. -> d(any character) or H(any character) 찾기 -> dy, HH, do ... 등등
[owy][yow] -> ow, oy, ww, ... (문자 2개 찾기)
[C-K] -> C부터 K 범위에 있는 알파벳 문자 1개 찾기 -> [CDEFGHIJK]와 같은 의미.
[a-d] -> a부터 d까지
[2-6] -> 2부터 6까지
[C-Ka-d2-6] -> C~K or a~d or 2~6 사이인 문자 1개 찾기
[^CDghi45] -> C, D, g, h, i, 4, 5가 아닌 문자 찾기 -> ^가 []안에 쓰이면 부정의 의미
[^W-Z] -> W, X, Y, Z가 아닌 문자 찾기
서브패턴
(on|ues|rida) -> 문자열에서 on이거나 ues이거나 rida인 부분 찾기
(Mon|Tues|Fri)day -> Monday이거나 Tuesday이거나 Friday인 부분 찾기
..(id|esd|nd)ay -> 문자 2개 아무거나와 ay사이가 id이거나 esd이거나 nd인 부분 찾기
수량자
a*b -> 문자열에서 a가 0 ~ 여러개이고 뒤에 b가 붙는 부분 찾기 -> b, ab, aab, aaab 찾아짐.
a+b -> b 앞에 a가 1개 이상인 부분 찾기
a?b -> b 앞에 a가 없거나 1개인 부분 찾기
[-@]* -> [] 후보군에 속하는 문자가 없거나 여러개인 부분 찾기 -> -@-, --
*+ -> *이 1개 이상인 부분
-@+- -> 앞과 뒤가 -이고, @가 1개 이상인 부분 찾기 -> -@-, -@@-, -@@@-, ...
[^ ]+ -> 공백이 아닌 것이 1개 이상인 부분 찾기
-X?XX?X -> -XX, -XXXX, -XXX
-@?@?@?- -> --, -@-, -@@-, -@@@-
.{5} -> 어떠한 문자이던간에 5글자 선택하기
[els]{1,3} -> e또는 l또는 s 조합으로 1~3개 문자만 선택 -> e, ee, el, ess
[a-z]{3,} -> a부터 z까지 문자의 조합 중 3개 이상인 부분 선택
AB*A == AB{0,}A
AB+A == AB{1,}A
AB?A == AB{0,1}A
r.* -> r, rfjdaklsfjslk, riinlk dkfjls (공백도 다 선택됨.)
r.*? -> r만 가능 -> 수량자 뒤에 ?가 오면 해당 수량자가 가질 수 있는 최소 수를 선택하게 됨.
r.+? -> rx, rd, rb, rq, rr
r.?? -> r만 가능
경계
w -> word(알파벳, 숫자, _)만 선택
w == [A-z0-9_]
W -> word가 아닌 것 선택
d -> 숫자만 선택
D -> 숫자가 아닌 것 선택
b -> 단어 boundary
bw -> 단어의 첫 글자 선택
wb -> 단어의 마지막 글자 선택
bwb -> 단어의 길이가 1인 단어 선택
bw+b -> 단어 별로 선택됨.
B.B -> 단어 경계(앞, 뒤)를 제외한 나머지 선택됨.
A -> 단어 경계의 시작점을 가리킴 (글자 가리키지 않음.)
A... -> 시작 경계로부터 글자 3개
...Z -> 끝 경계로부터 글자 3개
<?php
// php에서는 정규표현식을 /(정규표현식)/(pattern modifier) 으로 작성한다.
// match 되는 부분 있으면 1, 없으면 0 리턴
//
// pattern modifier
// i: 패턴 매칭을 할 때, 대소문자를 구분하지 않도록 한다.
// m: 멀티라인으로 작동. (^나 $를 여러줄에서 사용할 때, match되는 부분들 중 맨 앞/맨 뒤에만 적용됨.)
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
// PHP에서 걸림. -> match -> 1 리턴.
echo "A match was found. (1)<br>";
} else {
echo "A match was not found. (1)<br>";
}
// b는 단어의 경계를 의미한다. 그렇기 때문에 b로 감싸진 web은 web이라는 독립된 단어를 의미한다. website는 이 조건에 해당하지 않는다.
if (preg_match("/bwebb/i", "PHP is the web scripting language of choice.")) {
echo "A match was found. (2)<br>";
} else {
echo "A match was not found. (2)<br>";
}
if (preg_match("/bwebb/i", "PHP is the website scripting language of choice.")) {
echo "A match was found. (3)<br>";
} else {
echo "A match was not found. (3)<br>";
}