손에 잡히는 정규표현식을 읽으며, 정리 (1)
정규표현식 문자 찾기, 문자 집합, 문자/집합 제외 찾기
정규표현식 정리 시리즈
실제 개발을 하며 정규표현식이 많이 쓰여 쓸때마다 찾아볼 수 없을 것 같아서 손에 잡히는 정규표현식 책을 사서 공부해보려고 한다. 또 책을 읽으며 간단하게 글로 정리하려고 한다.
사용되는 예제는 자바스크립트
로 작성했다.
정규 표현식으로 문자 찾기
정규 표현식에서 .
은 하나의 문자에 대응한다.
'hello world, hi'.match(/h./g); // ['he', 'hi']
자바스크립트에서
/h./g
중 g는 global 옵션으로 문자열 중 패턴에 일치하는 모든 값을 반환할 수 있도록 한다.
이렇게 he
와 hi
와 같이 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 k1
중 i 혹은 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*']