1. [정규표현식 메타문자] 서브 패턴 (subexpression) (그룹화) (캡처그룹, capture group) : ( )
※ 서브 패턴 또는 캡처에 의한 캡처그룹화는, 부분을 감싸서 구별짓고, 기억하여, 이를 활용키 위함
- 例) color 또는 colour 매치하려면, col(o|ou)r
. 여기서, 캡처를 지시하는 괄호 (pattern)는,
. 캡처 그룹(capture group)을 만들어, 이를 통해 매칭된 내용을 기억, 활용코자하는 것임
ㅇ 주요 역할
- 문자열 (서브패턴) 위주의 탐색
. 서브 패턴을 만들어 재활용 할 때 유용
- 일치한 문자열 (서브패턴, 그룹)의 저장 (캡처) 및 재활용
. 검사 결과의 임시 저장 후, 번호를 붙여, 다시 불러쓸 수 있음 (backreference : 역 참조)
.. 그룹으로 묶은 패턴의 검사 결과 뒤에, 수량자를 붙여, 어떤 추가 작업에 활용 가능
- 검사 결과의 저장 또는 비 저장 선택 가능 ☞ 아래 2.번항 참조
- 탐색 방향을 달리 정할 수 있음
2. [정규표현식 메타문자] 그룹화 검사 결과의 저장(캡처) 또는 비 저장(논 캡처,비 참조) 구분
ㅇ 기본적인 그룹화 : (), (?:)
- 매치 결과를 `캡처(저장)하는` 그룹화, ()
- 매치 결과를 `캡처(저장)하지 않는` 그룹화, (?: ) 또는 (\% \)
3. [정규표현식 메타문자] 탐색 방향까지도 지정 가능한, 그룹화 기능의 확장
※ 통상의 정규표현식은, 텍스트를 매칭하지만,
- 때때로, 매칭할 텍스트의 위치 만을 표시하고 싶을 때가 있음
. 문자열이 아닌 위치에 일치시키고, 일치 결과의 위치를 반환함
. 이때, 반환되는 문자가 없으므로, 반환 길이는 0 임
- 이렇게되면, 탐색 방향(전방 탐색,후방 탐색)을 결정하는 그룹화가 가능하게 됨
- 한편, 그룹화 안에, 리터럴(문자열)이나 메타문자를 포함할 수 있음
ㅇ 긍정형 전방탐색 (positive lookahead) : (?=)
- 전방 탐색 문자열 (?=regex)인 위치로부터 앞에서(순방향) 찾음
. 例) 1000원 => .+(?=원) => 1000
. 例) http://www.example.com => .+(?=:) => http
. 例) abracadabra => a(?=..a) => abracadacra : 처음`abra` 및 끝`acra`
ㅇ 부정형 전방탐색 (negative lookahed) : (?!)
- 전방탐색 문자열 (?!regex)이 아닌 위치로부터 앞에서(순방향) 찾음
. 例) hello world helloabc hello123 => hello(?!abc)
=> hello world helloabc hello123
.. `hello world`,`hello123`은 매칭되지만, `helloabc`는 비 매칭
ㅇ 긍정형 후방탐색 (positive lookbehind) : (?<=)
- 후방탐색 문자열 (?<=regex)인 위치로부터 뒤에서(후방향) 찾음
. 例) Price: USD100 => (?<=USD)\d+ => 100
.. (?<=USD) 뒤에서 하나 이상의 숫자(100)를 찾음
ㅇ 부정형 후방탐색 (negative lookbehind) : (?<
!)
- 후방탐색 문자열 (?<
!regex)이 아닌 위치로부터 뒤에서(후방향) 찾음
. 例) abc로 끝나지 않은 단어 찾기
.. xyz123 xyzabc xyzdef => \w+(?<
!abc)\b => xyz123 xyzdef
※ 단, 자바스크립트 언어는, 후방 탐색을 지원 안함