[Regex] 정규표현식 고급기능 소개



정규식표현식을 아주 잘하지는 못해도 어느정도 잘 쓰고 있다고 생각을 했는데 일반적인 책에 잠깐나온 정규식방법으로 공부하기도 했고.. 인터넷으로 그때그때 찾아서 하다보니 쉬운것만 알고있었지 지금까지는 제대로 사용을 하지 못했던 것 같다.

인터넷에서 많이들 소개하는 정규표현식 말고 좀 더 고급 기능과 응용을 정리하려 한다.





1. 수량자(Quantifier) - 탐욕적 수량자와 게으른 수량자



1004lucifer



정규식은 기본적으로 가능한 한 넓은 범위(탐욕적 수량자)로 매칭을 하게 되는데..
그 범위를 최소화 할 수 있는게 게으른수량자 방법이다.


탐욕적 수량자      게으른 수량자
*                     *?
+                    +?
{n,}                  {n,}?









2. 역참조(backreferences)

1004lucifer

  <(h\d)>.*?<\/\1>



<h1> 태그는 </h1> 태그로 끝나야 한다.
일반적인 방법으로는 각각의 상황에 대해서 정규식을 만들어야 하겠지만 역참조 방법을 이용하면 매칭된 문자열을 참조해서 간단하게 정규식이 가능하다.



사용방법은 괄호 "(, )" 로 묶은 공간을 \[숫자] 또는 $[숫자] 로 참조할 수 있다.
[숫자] 부분은 괄호 "(, )" 에서 매칭된 순서이다.

다음과 같다고 보면 된다.

  Regex : \((\d*)\)(\d*)-(\d*)

  String : (010)123-4567

  \1 : 010
  \2 : 123
  \3 : 4567


\[숫자]$[숫자] 를 사용하는 기준은 정규표현식 구현에 따라 다르다.
(자바스크립트의 경우에는 \[숫자] 를 사용한다.)




PS.
역참조는 꼭 찾기 기능에서만 사용할 수 있는게 아니다.
치환 기능에서도 역참조가 사용이 가능하다.

대부분의 에디터는 정규식 지원이 되는데 다음과 같이 문자열 치환이 가능하다.


'Replace All' 을 누르면 아래와 같이 치환이 된다.









3. 전후방탐색(lookaround)

- 전후방탐색 패턴은 일치영역을 발견해도 그 값을 반환하지 않는 패턴을 말한다.

기본 샘플


1) 전방탐색(lookahead)

- positive lookahead 사용방법
?= 사용 후 뒤에 일치할 패턴을 입력한다.

htt.*(?=:)

PS.
positive lookahead 를 이용한 문자열에서 단어 AND 연산이 가능하다.
링크 - [Regex] 정규표현식 AND 연산 사용방법


1004lucifer
- negative lookahead 사용방법
?! 사용 후 뒤에 일치하지 않을 패턴을 입력한다.

htt.*\/\/(?!eclipse)






2) 후방탐색(lookbehind)
(Javascript 에서는 지원되지 않는다.)

- positive lookbehind 사용방법
?<= 사용 후 뒤에 일치할 패턴을 입력한다.
positive 전방탐색에서 < 기호만 추가되었다.

(?<=\/\/).*\.



- negative lookbehind 사용방법
?<! 사용 후 뒤에 일치하지 않을 패턴을 입력한다.
negative 전방탐색에서 < 기호만 추가되었다.

(?<!https):.*









4. 조건
(Javascript 에서는 지원되지 않는다.)

- if문과 비슷한 느낌..

사용방법
(?(condition)true)
(?(condition)true|false)


다음과 같이 사용 시 - (?(condition)true)

\d{5}(?(?=-)-\d{4})




다음과 같이 사용 시 - (?(condition)true|false)

(\d{4}).-(?(1)\1|\d{1})



댓글