문자 집합 : [] - 대괄호 사이에 찾고자 하는 문자들의 집합을 표기한다
[] 안에 존재하는 문자들중 한 문자만을 나타낸다.
예)
[0-9] : 0부터 9까지의 숫자 한 문자
[Aa] : A 혹은 a에 대응하는 한 문자
"-"(하이픈)은 문자 집합인 대괄호 안에서 만 문자의 범위를 지정하는 기호로 쓰인다.
예) [abc] 는 a 또는 b 또는 c 중에
한문자를
나타낸다. 여기서 '-'를
사용할땐
범위를
나타낸다.
즉 [ a-f ] 는 [abcdf] 와
같은것을
나타낸다.
문자클래스
오퍼레이터라는
것에
대해
잠시..
유사한
성격의
문자들을
사용자가
알아보기
쉽게
단어로
그룹을
지었다고
보면
된다.
alnum : 알파벳과
숫자
alpha : 알파벳
blank : 스페이스나
탭 (시스템에
의존적임)
cntrl : 아스키코드에서의 127 이상의
문자와 32 이하의
제어문자
(한글의
첫째바이트가 127 이상이므로
제어문자로
취급됨 :()
digit : 숫자
graph : 스페이스는
제외되고
나머지는 'print' 항목과
같음.
lower : 소문자
print : 아스키코드에서 32에서 126까지의
찍을
수
있는
문자
punct : 제어문자도
아니고
알파벳.숫자도
아닌
문자
space : 스페이스, 케리지
리턴, 뉴라인, 수직
탭, 폼피드
upper : 대문자
xdigit : 16진수, 0-9, a-f, A-F
[[:alnum:]]은 [a-zA-Z0-9] 와
같은
의미다.
[[:alpha:]]은 [a-zA-Z] 와
같은
의미다.
문자열
오퍼레이터는 [] 사이에서만
효력을
발휘한다.
그리고
반대의
의미도
가능하다.
[^[:alnum:]] 은
알파벳과
숫자의
조합이
아닌것을
말한다.
[^a-zA-Z0-9] 와
같이
사용될수도
있다.
제외 문자 : ^ (캐럿) - ^기호 뒤의 문자를 제외한 문자 (집합기호 - [] - 안에서 쓰일때)
예)
ns[^0-9] : nsx - ns다음의 x가 숫자가 아닌 한 문자에 대응
메타 문자 : 정규표현식에서 특별한 의미를 가지는 문자
정규표현식에서 메타문자 및 기호문자를 찾고자하는 문자에 대응하려면 "\"(escape)를 붙혀 사용한다.
모든 문자 : .(마침표) - 모든 문자에 대응되는 한 문자
공백 문자 : \n, \r, \t, \f-form feed, \v-vertical tab
특별한 문자 형태
숫자와 숫자 아닌문자 : \d - [0-9], \D - [^0-9]
영숫자 문자와 영숫자 문자가 아닌 문자 : \w - [a-zA-Z0-9_], \W - [^a-zA-Z0-9_]
공백문자와 공백이 아닌문자 : \s - [\f\n\r\t\v], \S - [^\f\n\r\t\v]
16진수 8진수 : \x, \0
반복찾기
+ : 한 문자 이상 - + 기호 앞으 문자가 하나 이상 반복
* : 문자가 없거나 하나 이상 반복
? : 문자가 없거나 하나와 대응하는 문자 예) https?// - s가 없거나 한번 있는 경우와 대응
반복회수 지정하기 : {} (중괄호) - 중괄호 앞의 문자에 대하여 반복회수 지정, 앞에 있는 문자나 문자열의 개수를 정하는 것
반복회수 지정 : {반복회수} - 저정된 회수만큼 반복하는 경우 대응, ()안에 있는 글자들을 그룹화
예)
#[0-9A-Fa-f]{6} - 16진수 RGB표기
최소, 최대 반복회수 지정 : {최소, 최대} - 최소번 또는 최대번만 반복되는 경우 대응, 최소값에 0과 최대값의 생략 가능
예) "ab" 는 "abb"를
나타낸다. 즉 b의
개수가 2개를
나타낸다.
"ab{2,}" 는 abb, abbbbb 등 b의
개수가 2개
이상을
나타낸다.
"ab{3,5}" 는 abbb, abbbb, abbbbb 와
같이 b가 3개에서 5개
까지를
나타낸다.
예)
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4} - -또는 / 구분의 날짜 표기
greedy와 lazy 수량자
탐욕적 수량자 : +, *, {n,}
게으른 수량자 : +?, *?, {n,}?
예) abcd <b>xxx</b> and <b>yyy</b> efgh
greedy : <[Bb]>.*</[Bb]> --> <b>xxx</b> and <b>yyy</b>
lazy : <[Bb]>.*?</[Bb]> --> <b>xxx</b> 와 <b>yyy</b>
단어 경계 지정
단어 사이의 공백 : \b - 공백문자(space)와 일치하지만 공백을 일치하는 문자로 지정하지는 않는다. (\B - \b와 반대) --> 단어 사이의 구분자로 쓰임
실제 공백 문자를 찾을 때는 [ ]또는 \s를 활용한다.
시작 문자 지정 : ^(캐럿) - 제외 문자와 달리 표현식의 처음에 사용되어 다음에 나오는 문자를 시작하는 문자로 지정할 수 있다.
마지막 문자 지정 : $ - 앞에 나온 문자가 마지막에 일치할때
다중행 모드 : (?m)
지정한 문자열을 줄단위로 분리하여 표현식을 검색한다.
표현식의 가장 앞에 써준다.
다중행 모드 지정시 ^와 $를 지정단 문자열의 줄단위로 검색하는 것이 가능하다.
예) 라인단위 주석(//) 문자로 부터 해당 라인의 끝까지
(?m)^//.*$
하위 표현식 : () - 괄호
표현식 일부를 괄호로 묶어준다.
중첩 하위 표현식 : 괄호안에 괄호...
or 연산자 : | - | 기호의 좌우 둘중 하나가 일치하는 경우
"a|b" 는 a 또는 b 둘중
하나를
나타낸다.
참고할것은
기호인데
이것은 . (, ) 등
단지
다음에
오는것이
문자라는것을
의미한다. 어떤한
처리도
없이
문자로만
인식한다.
{1,3} 하고
하면 {1,3} 와는
다르다.
예) 아이피 형식의 문자열
(\d{1,3}\.){3}\d{1,3}
(((\d{1,2})|(1\d{2}))|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2}))|(2[0-4]\d)|(25[0-5]))
역참조 : \1 ~ \9
표현식 중 하위 표현식의 순서와 지정한 번호가 해당 하위 표현식과 일치한다.
0번을 지정하면 해당 표현식 전부와 일치한다.
예) html의 <H1~6>태그의 내용 찾기
<Hh([1-6])>.*?</Hh\1>
전방탐색과 후방탐색 : 하위표현식으로 표현
전방탐색 : ?= - 지정한 전방 탐색 기호의 다음 표현식으로 부터 앞에 나오는 일치하는 문자를 찾는다.
후방탐색 : ?<= - 지저한 후방 탐색 기호의 다음 표현식으로 부터 뒤에 나오는 일치하는 문자를 찾는다.
예) html tag기회 내의 내용
(?<=<[Tt][Ii][Tt][Ll][Ee]>).*?(?=</[Tt][Ii][Tt][Ll][Ee]>)
부정형 전/후방 탐색 : 전방 - ?!, 후방 - ?<!
예) $로 시작하지 않는 숫자
\b(?!\$)\d+\b
조건 달기 : ?
? 앞의 문자(표현식)가 없거나 한번 일치할때 해당하는 앞으 문자(표현식)과 일치한다.
전후방 탐색(?=, ?<=)의 뒤에 나오는 표현식과 일치할때...
역참조 조건 : (?(backreference)true), (?(backreference)true|false)
backreference는 역참조 대상의 하위 표현식이며, \를 붙이지 않고 해당 하위 표현식 순서에 해당하는 번호를 지정한다.
예) IMG 태그나 이미지 태그를 싸고 있는 A태그
(<[Aa]\s+[^>]+>\s*)?<[Ii][Mm][Gg]\s+[^>]+>(?(1)\s*</[Aa])>)
예)
(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}
전방 탐색 조건 : (?(?=condition)expressions)
예)
\d{5}(?(?=-)-\d{4})
1. ^ 와 $ 의
사용의
예
'^' 는
바로
문자뒤의
문자열로
시작
됨을
가르킨다.
"^The" : 는 "The"로
시작
하는
문자를
말한다.
'$' 는
문자열의
맨
마지막을
가르킨다.
"of despair$" : 는 "of despair"로
끝나는
문자열이다.
"^abc$" : 는 hello로
시작해 hello로
끝나는
경우
이므로 "abc" 만
해당된다..
2. '.' '*' '+' '?' 의
사용법
'.' 은
어떤
문자든지
임의의
한문자를
말한다.꼭
하나의
문자가
있어야
한다.
예) "x.z" 는 xyz, xxz, xbz 등이고 xz난 xyyz는
안된다.
'*' 는
바로
앞의
문자가
없거나
하나
이상의
경우를
말한다.
예) "ab*" 는 a, abc, ab, abbbb 등을
말한다.
'+' 는
바로
앞의
문자를
나타내면
꼭 1나
이상이어야
한다.
예) "ab+" 는 abc, abbb 등이고 a는
되지
않는다.
'?' 는
바로
앞의
한문자가
있거나
없는것을
말한다. 단지
한문자
만이어야
한다.
예) "ab?" 는 a 또는 ab 를
나타낸다.
3. '()' 는 ()안에
있는
글자들을
그룹화
한다.
예) a(bc)* 는 a, abc abcbc 등 'bc'가
없거나
하나
이상인
경우이다.
"a(bc)" 는 abcbc 를
나타낸다.
4. 기초
활용
"a(bc)*" 는 a라는
문자를
포함하고 bc라는
문자열이
없거나
계속반복되는
문자열이다.
이것은 a, abc ,abcbc abcbcbc.... 등의
문자열을
의미한다.
"a(bc){1,5}" 는 a 라는
문자를
포함하고 bc 라는
문자를
묶은
형태인데. bc 라는
문자가
한번에서 5번까지를
말한다. --말이
더
어렵다....
이것은 abc,abcbc,abcbc,abcbcbc,abcbcbcbc,abcbcbcbcbc 의
문자열을
의미한다.
^[1-9][0-9]*$ 는
자연수를
표시할수
있다.
^(0|[1-9][0-9]*)$ 는 0을
포함하는
자연수
^(0|-?[1-9][0-9]*)$ 정수표시
^[0-9]+(.[0-9]+)?$ 소숫점
표시
^[0-9]+(.[0-9])?$ 소수점
둘째자리
까지
^[0-9]+(.[0-9]{1,2})?$ 소수점
둘째자리나
첫째자리
^[0-9]{1,3}(,[0-9])*(.[0-9]{1,2})?$ 돈의
표시...
(센트까지
표시가능
예 2,200.20 : 이천이백이십센트
또는
이천이백이십전
맞나?)
5. 복합활용
5-1 메일
주소
체킹..
5-1-1 : 유저명@도메인명
유저명 : 대문자, 소문자, 숫자
그리고 '.' '-' '_' 을
가질
수있지만 . 로
시작해서는
안된다.
[_0-9a-zA-Z-]+(.[_0-9a-zA-Z]+)*
이때에는 eregi 를
사용할때까
아닌 ereg 를
사용할때이다. eregi 함수는
대소문자구분이
없다.
^[_a-z0-9-]+(.[_a-z0-9-]+)*$ eregi 함수를
사용할때...
5-1-2 : 도메인 : 유저명과
기본적으로는
같지만 _ 가
없다.
^[a-z0-9-]+(.[a-z0-9-]+)*$
5-1-3 : 메일
주소
체킹
위의
것의
조합이다.
^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
5-2 URL 에 http:// 붙여주기
URL 은
대문자, 소문자, 숫자 ,'.','_','=','&','?','~','@','/','+' 를
사용
할수
있다
즉 http://([0-9a-zA-Z./@~?&=_]+) 가
된다.
$add="www.codelib.co.kr";
$pattern ="([0-9a-zA-Z./@~?&=_]+)";
$link =ereg_replace($pattern, "http://1" $add);
echo ("$link");
의
결과 $link 는
다음처럼
변경
된다.
http://www.codelib.co.kr
와
같이
된다. 참고로 1 은
첫번째
괄호안의
값을
말한다. 2는 2번째..
필수 정규 표현식
이름입력 - 한글 2~5자리 허용
"/^[\x{ac00}-\x{d7af}]{2,5}$/u"
이메일 - 워낙많은 정규식들이 있어서 가장 유용하다 싶은 정규식으로 만들어봤습니다.
"/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"
집전화번호 - 지역번호가 들어간 전화번호를 확인할때 유용합니다.
"/^(070|02|031|032|033|041|042|043|051|052|053|054|055|061|062|063|064)-\d{3,4}-\d{4}$/u"
휴대폰번호 - 문자 발송등의 작업할경우 휴대폰 번호만 입력받을경우 유용합니다.
"/^(010|011|016|017|018|019)-\d{3,4}-\d{4}$/u"
우편번호 - 총6자리 숫자로 가운데 -(하이픈)이 있는경우와 없는경우 둘다 허용합니다.
"/^\d{3}-?\d{3}$/u"
아이디 - 아이디는 영문/숫자만 허용하며, 첫글자는 영문자로 시작하여야 하며, 3자리에서 8자리 이내로 입력받음
"/^[a-zA-Z]\w{2,7}$/u"
주민번호 - 숫자 13자리를 받으며, 가운데 -(하이픈)은 있어도 없어도 되며, 일부 자리수에 대하여 나올수 있는 숫자에 제한을 두었음
"/^\d{2}[0-1]\d[0-3]\d-?[1-6]\d{6}$/u"
날짜 - 일반 -(하이픈)형태의 날짜를 받으며, 자리수 별로 올수 없는 숫자의 경우 일부 제한을 두어 너무 엉뚱한 날짜 입력을 일부 막음
"/^[1-2][9|0]\d{2}-[0-1]\d-[0-3]\d/u"
예시 참고
정규식 + snoopy 클래스 사용 사이트 긁어오기
http://hosting.websearch.kr/128
snoopy로 로그인 처리
정규표현식 문자
: http://plusdream.tistory.com/196
메일 정규식 표현
http://hanvic.egloos.com/3256875
참고 사이트 :
'Old > PHP' 카테고리의 다른 글
Source Tree (0) | 2013.03.11 |
---|---|
생활코딩 - Xdebug (0) | 2013.03.11 |
curl 원격지 xml 가져오기 (0) | 2013.03.11 |
PHP 정규 표현식(정규식:Regular expression) (0) | 2013.03.08 |
PHP라이브러리 – Snoopy (0) | 2013.03.08 |