해당 자료는 부산대학교 최성기 교수님의 웹 응용 프로그래밍 강의 자료입니다.

모든 언어에 문자열 검증이나 정렬을 위해 정규식(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 : 위의 반대로, 나머지 특수문자들을 의미한다.
  • /^/ : 집합 기호 밖의 캐럿(^)은 문자열의 시작을 의미한다.