꼬꼬마 블로그

꼬꼬마의 기술 블로그

손에 잡히는 정규표현식을 읽으며, 정리 (1)

정규표현식 문자 찾기, 문자 집합, 문자/집합 제외 찾기

#RegExp
2022.04.02.

정규표현식 정리 시리즈

실제 개발을 하며 정규표현식이 많이 쓰여 쓸때마다 찾아볼 수 없을 것 같아서 손에 잡히는 정규표현식 책을 사서 공부해보려고 한다. 또 책을 읽으며 간단하게 글로 정리하려고 한다.

사용되는 예제는 자바스크립트로 작성했다.

정규 표현식으로 문자 찾기

정규 표현식에서 .은 하나의 문자에 대응한다.

'hello world, hi'.match(/h./g); // ['he', 'hi']

자바스크립트에서 /h./g 중 g는 global 옵션으로 문자열 중 패턴에 일치하는 모든 값을 반환할 수 있도록 한다.

이렇게 hehi와 같이 h 뒤에 아무문자 하나가 함께있는 패턴을 찾아 반환했다.

.은 여러번 사용할 수 있다.

'hello world, hi'.match(/h../g); // ['hel']

/h../h 뒤에 아무문자 두개가 와야하는데 hi의 경우는 뒤에 아무문자가 없어서 반환되지 않았다

'hello world, hi '.match(/h../g); // ['hel', 'hi ']

다만 뒤에 space가 들어간다면 .에 대응되어 반환된다. (\n (개행)은 대응되지 않아 hi\n은 반환되지 않음)

문자 집합

[]은 문자 집할을 정의할때 사용할 수 있다.

i1 j1 k1i 혹은 j 문자 뒤에 문자가 오는 패턴을 찾기 위해선 [ij]라는 문자열 집합을 이용할 수 있다.

'i1 j1 k1 ia'.match(/[ij]./g); // ['i1', 'j1', 'ia']

조건을 조금 바꿔 i 혹은 j 문자 뒤에 숫자 하나가 오는 패턴을 찾으려면 어떻게 해야할까?

'i1 j1 k1 ia'.match(/[ij][0-9]/g); // ['i1', 'j1']

이렇게 [0-9]로 숫자 범위를 설정할 수 있다. 물론 [0123456789]를 사용할 수 있지만, 범위 집홥을 통해 쉽게 사용할 수 있다.

[a-z] 혹은 [A-Z]와 같이 사용할 수 있으며 ASCII 코드를 기반으로 범위가 지정된다.

또 여러 범위를 합쳐서 사용할 수 있다.

`[0-9a-Z]와 같이 사용할 수 있다.

'i1 j1 k1 ia i*'.match(/[ij][0-9a-z]/g); // ['i1', 'j1', 'ia']

제외하기

특정 문자나 집합을 ^(캐럿)을 사용해 제외할 수 있다.

i 혹은 j 문자 뒤에 숫자를 제외한 문자 하나에 대한 패턴을 통해 확인해보겠다.

'i1 j1 k1 ia i*'.match(/[ij][^0-9]/g); // ['ia', 'i*']