간단 명료 하게 정규식 이해하기(1)
문자 찾기
정규식 내에서 작성된 문자는 동일한 문자를 찾아냅니다.
아무 문자 찾기
정규식에서는 특수 기능을 위한 "메타 문자" 가 존재합니다.
모든 문자에 해당하는 메타 문자는 점(.) 입니다.
* 메타 문자를 일반 문자열로 사용하기 위한 방법이 역슬래시(\) 입니다. ex) \. ➡️ 점, . ➡️ 모든 문자열 (이를 이스케이프라고 합니다)
집합으로 찾기, 집합으로 제외하기
[] 대괄호는 내부 문자들을 OR 로 묶어냅니다.
[] 대괄호를 캐럿(^) 으로 시작하면 제외의 의미로 사용됩니다.
메타 문자 찾기
앞서 설명했듯 약속된 메타 문자들은 문자 그대로 사용할 수 없기에 이스케이프(\) 를 앞에 붙여 일반 문자 취급할 수 있습니다.
- . : 임의의 문자 하나를 나타냅니다.
- * : 바로 앞에 나오는 문자나 그룹이 0번 이상 반복됨을 나타냅니다.
- + : 바로 앞에 나오는 문자나 그룹이 1번 이상 반복됨을 나타냅니다.
- ? : 바로 앞에 나오는 문자나 그룹이 0번 또는 1번 나타남을 나타냅니다.
- ^ : 문자열의 시작을 나타냅니다.
- $ : 문자열의 끝을 나타냅니다.
- [] : 대괄호 안에 들어가는 문자 중 하나와 매치됨을 나타냅니다.
- () : 그룹을 나타내며, 패턴 매칭 결과를 그룹화할 수 있습니다.
- | : OR 연산을 수행합니다.
이스케이프(\) 또한 메타 문자
문자 클래스
메타 문자의 역할은 문자 그대로지만, 반대로 이스케이프를 통해 메타 문자가 되는 것들도 있습니다. 이를 문자 클래스(classes of characters) 라고 합니다.
줄바꿈의 메타 문자는 \n 입니다. 두개를 연속으로 조합해 공백 한 줄을 잡아낼 수 있습니다.
만약 \n 를 하나만 사용한다면 6개의 문자열의 각 끝을 잡아냅니다.
- \d : 숫자(digit)를 나타냅니다. [0-9]와 동일합니다.
- \D : 숫자가 아닌(non-digit) 문자를 나타냅니다. [^0-9]와 동일합니다.
- \w : 단어(word) 문자를 나타냅니다. [a-zA-Z0-9_]와 동일합니다.
- \W : 단어 문자가 아닌(non-word) 문자를 나타냅니다. [^a-zA-Z0-9_]와 동일합니다.
- \s : 공백 문자를 나타냅니다. 스페이스, 탭, 줄바꿈 등이 포함됩니다.
- \S : 공백 문자가 아닌(non-space) 문자를 나타냅니다.
자주 쓰는 메타 문자
+ : 바로 앞 문자가 최소 1번 이상 반복되 는 것을 찾음
* : 바로 앞 문자가 0번 이상 반복되는 것을 찾음
? : 바로 앞 문자가 0번 혹은 1번 나타남
구간(Interval)
., +, *, ? 는 0번이상 혹은 1번이상으로 정해져있습니다.
정확히 앞 문자의 갯수를 판단하기 위해서는 {지정개수} or {최소,최대} 를 사용할 수 있습니다.
{최소,} or {,최대} 로 하나의 역할만 사용할 수 도 있습니다.
탐욕적(greedy) 수량자와 게으른(lazy) 수량자
*, +, {n,} 과 같은 수량자들은 최소값을 명시한 케이스인데
사진과같이 의도한 바와는 다르게 매치가되었습니다.
이는 수량자들은 기본적으로 탐욕적으로 동작하기에 매치가 가능한 목록 중 가장 큰 덩어리를 매치합니다.
이를 반대로 최소한의 덩어리를 우선으로 동작하게 하고싶다면 수량자 뒤에 ?를 붙입니다.
단어 경계 지정하기
어떤 단어를 찾을 때, 정확히 그 단어만으로 찾고싶을 때가 있습니다.
그럴 때 \b \B 를 활용하여 범위를 지정할 수 있습니다.
\b : \w 와 \W 사이 위치를 가리킵니다.
\B : \w 와 \w 혹은 \W 와 \W 사이 위치를 가리킵니다.
* 중요한 점은 \b 와 \B 는 문자와 일치하는 것이 아니고, 위치를 가리키기 때문에, 찾은 문자열에서 제외됩니다.
단어 경계 지정하기(2)
^ : 뒤 이어진 단어로 시작
& : 앞 단어로 끝남
* 하지만 m(multiline) 플래그 적용시, \n 줄바꿈 마다 적용합니다.
'개발 > 정규식' 카테고리의 다른 글
간단 명료 하게 정규식 이해하기(2) (0) | 2023.04.09 |
---|