(1)편에 이어서
■ 패턴변경자
- 패턴구분자(/와 /)가 끝나면 그 뒤에 쓰는 것으로 패턴에 일괄적으로 변경을 가할 때 사용한다. 정규식 엔진에 따라 변경자의 적용 방식이 상이하므로 해당 구현 스펙을 읽어봐야 한다.
- i : 패턴을 대소문자 구분없이 검사한다. 영어가 아닌 대소문자 언어의 경우 버그 가능성이 있으므로 쓰지 않는 게 좋다.
- s : 임의의 한 문자를 가리키는 . 메타문자에 개행문자(∖n)도 포함시키도록 한다.
- g : ^, $ 문자가 문자열 단위로 적용된다.
- m : 주어진 문자열에 줄바꿈이 있을 경우 여러줄로 취급하여 검사한다.원래 정규표현식을 쓸 때 줄바꿈은 무시되는데, 이걸 사용하면 줄바꿈을 적용해서 검사한다. 그리고 ^와 $가 줄 단위로 적용된다.
- x: 공백문자를 무시한다. 단 이스케이프하거나 문자 클래스 안에 있을 경우 예외로 처리한다. 정규식을 읽기 편하게 만들기 위한 용도지만 엔진에 따라 지원하지 않을 수도 있다.
■ 심화
- 정규식에는 if와 같은 개념인 전방탐색과 후방탐색이 존재한다. 전방탐색은 특정한 문자 앞에 일치하는 문자만 찾고, 후방탐색은 특정한 문자 뒤에 일치하는 문자만 찾는다. 이러한 탐색으로 일치된 문자는 그룹처럼 보이지만 결과에는 포함되지 않는다.
- (?=) : 전방탐색, 찾고자 하는 표현식 뒤에 전방탐색 표현식을 넣으며 (?=와 ) 사이에 표현식을 넣는다.
- (?<=) : 후방탐색, 찾고자 하는 표현식 앞에 후방탐색 표현식을 넣으며 (?<= 와 ) 사이에 표현식을 넣는다.
- 이와 반대인 부정형 탐색은 = 대신 !를 넣으면 된다.
- 이 글의 마지막은 조건절이다. IF...THEN...ELSE 식 구성으로 "(?(C)A|B)"와 같이 표현한다. C는 조건, A는 조건이 참일 때 매치하는 패턴, B는 거짓일 때 매치하는 패턴이며 조건에 들어갈 수 있는 내용은 이미 세팅된 캡쳐링 그룹의 번호나 이름, 탐색식 등등이 있다.
■ 여담 및 참조
- 정규표현식은 기본적인 부분은 같지만 언어마다 구현된 부분에 차이가 있다. 예를 들어 역참조나 조건절 기능은 언어에 따라 지원하지 않을 수도 있고 자바스크립트는 브라우저에 따라 후방탐색을 지원하지 않는다고 한다. 사용하는 언어의 정규표현식 지원 스펙을 제대로 알고 사용하면 좋을 것이다.
- 위 글은 아래 글을 기반으로 해서 작성되었습니다.
댓글 0