해당 자료는 부산대학교 최성기 교수님의 웹 응용 프로그래밍 강의 자료입니다.
모든 언어에 문자열 검증이나 정렬을 위해 정규식(Regular Expression)이 존재한다.
과연 PHP에서는 어떤 정규식을 사용할까?
Regex
기본적으로 PHP에서는 preg_match()
라는 함수를 통해 Pattern을 검증한다.
문법은 아래와 같다.
/ /
: 시작 및 종료 기호/ /kim
: 뒤의 kim은 flag 라고 하며, 정규식에 대한 옵션이다.- 위와 같이 정규식을 없이 실행하면, 아무 단어도 Matching되지 않는다.
.
: 임의의 Character 하나를 의미한다./.../
: 3글자의 단어를 Matching 해준다.- 문자열의 길이만큼 마침표를 찍으면, 전체 문자열이 선택된다.
/./g
: 이렇게 검색하면, 문자열 전체가 한 글자씩 잘려서 반환된다.
/A/
: 입력된 문자와 일치하는 첫번째 문자를 찾아 반환한다./A/g
: 문자열 전체에서, 패턴에 일치하는 모든 문자를 반환하는 Flag이다./A/gi
: 알파벳 대소문자를 무시하는 Flag인i
이다./A/m
: m flag는 문자열이 여러 줄일때, 모든 줄에서 검사를 한다.
/AA/
: 연속으로AA
가 등장하는 문자열을 찾아낸다.- 위와 똑같이 g, i Flag가 적용이 가능하다.
/A+/
: 앞의 패턴이 1번 이상 반복이 되는 문자열을 찾는다.- 불일치한 패턴을 만나게 되면, 매칭을 멈추고 반환한다.
/A+/g
: global flag를 넣게 되면, 해당 패턴이 반복되는 모든 문자열을 찾는다.
/https*/
: 위의+
와는 다르게, 0번 이상 패턴이 존재하는 지를 찾는다./https?/
:?
는 없거나, 1번 나타나는 패턴을 찾는다./#[0-9A-Fa-f]{6}/
: 패턴의 반복 횟수를 직접 지정해줄 수도 있다./#[0-9A-Fa-f]{3, 6}/
: 직접 반복 횟수의 범위를 지정해줄 수도 있다.
/A|B/g
: A나 B, 둘 다 찾아내며 global flag에 의해 모두 찾아진다./[AB]/g
: 위의 경우처럼 OR을 명시하지 않고, 대괄호로 표현할 수 있다./[a-zA-z]/
: a부터 z까지, A부터 Z까지 모두를 OR로 엮어놓은 정규식이다./[a-zA-z]+/g
: a부터 z까지, A부터 Z까지 반복되는 패턴이 있으면 모두 찾는 정규식이다.- ```/[^0-9]/`` : 캐럿(^)은 해당 집합의 문자는 등장하면 안된다는 Anti-Pattern이다.
/\$[0-9,]/
:$
는 메타 문자이기 때문에 일반 문자로 인식시키기 위해\
을 이용한다.- 위의 정규식을 이용하면
$12,000
이라는 값을 뽑아낼 수 있다. - 소수점 또한 포함시키고 싶다면,
[0-9,.]
으로 수정하면 될 것이다.
- 위의 정규식을 이용하면
\d
: 이미 정의된 메타문자로, 숫자를 의미한다.[0-9]
와 같다.\D
: 숫자를 제외한 모든 문자를 의미한다.
\w
: 영어 소문자, 대문자, 언더스코어, 숫자 모두를 포함하는 메타 문자이다.\W
: 위의 반대로, 나머지 특수문자들을 의미한다.
/^/
: 집합 기호 밖의 캐럿(^)은 문자열의 시작을 의미한다.