IT 삽질기

정규표현식(Regex)이란? 본문

개발

정규표현식(Regex)이란?

화이팅빌런 2021. 8. 10. 23:53

정규표현식이란?

정규표현식이란 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어로 텍스트 편집기와 프로그래밍 언어에서 문자열 검색과 치환을 위해 사용하고 있다.

프로그래밍시 그렇게 자주 사용되지는 않지만, 가끔 사용하는 경우가 있어 정리해 남겨두려고 한다.

 

정규표현식에서는 메타 문자라는 개념을 이용해 이와 일치하는 텍스트를 찾아낼 수 있는데, 사용할 수 있는 메타 문자가 어떤 것들이 있는지 어떻게 활용하는지에 대해 알아보자.

메타문자 의미
x? x가 0개 혹은 1개
x* x가 0번 이상
x+ x가 1번 이상
x{n} x가 n번
x{n,} x가 n번 이상
x{n,m} x가 n번 이상 m번 이하
. 임의의 문자 1개
^x x로 시작
x$ x로 끝
x|y x or y
[] []를 사용하는 경우 []에 들어있는 문자 중 하나를 찾는 것으로 앞서 언급한 메타문자를 []안에서 사용하는 경우 의미가 바뀌는 것도 있으니 주의하여 사용해야 한다.
[a-z] a ~ z 사이 문자 (range를 뜻함)
[^x] [] 밖에서 사용하는 ^와 다르게 [] 안에서 사용하는 경우 ^는 not의 의미를 가진다.
\d 0-9 숫자만 선택 [0-9]와 같은 의미
\D 숫자를 제외한 것들이 선택
\w 단어라고 할 수 있는 것들 선택되며 정규표현식에서는 알파벳, 숫자, _가 포함
\W 알파벳, 숫자, _를 제외한 것들이 선택
\s 공백문자에 대한 표시로 띄어쓰기, tab가 포함됨
\S 공백문자를 제외하고 선택

하나씩 예를 들어 설명하도록 한다.

x?

x?는 x가 0개 혹은 1개가 포함된 문자열을 찾는다.

He가 1개인 He와 H가 없이 e로 시작하는 e가 선택된 것을 볼 수 있다.

x*

x*은 x가 0개 이상 나타나는 것을 뜻하는데

H?e와 다르게 H가 2개 연속되어 있는 HHe도 선택되는 것을 알 수 있다.

x+

x+는 x가 1개 이상을 뜻하여 H가 포함되지 않은 egg는 선택되지 않는다.

x{n}

x{n}은 x가 정확히 n번 나오는 것을 뜻하고 이상 이하에 대한 것들을 포함하지 않는다.

x{n,}

x{n,}은 n번 이상으로 x{0,}으로 하는 경우 x*과 동일하고 x{1,}로 사용하는 경우 x+와 동일하게 사용할 수 있다.

x{n,m}

x{n,m}은 x가 n번 이상 m번 이하로 나오는 것으로 x{0,1}로 사용하게 되면 x?와 동일하다

.

.은 임의의 한 문자를 뜻하는데, 예를 통해 살펴보면 쉽게 이해할 수 있다.

H와 w사이에 어떤 한 문자가 온다는 뜻으로 어떤 숫자나 문자 특수문자등 어떤 것들이 있어도 상관이 없다.

^x

^x는 x로 시작하는 문자열을 찾는 것으로 x로 시작하는 모든 문자열을 찾을 수 있다.

x$

x$는 x로 끝나는 모든 문자열을 찾는 찾을 수 있다.

x|y

x 또는 y를 찾는다. 조합하여 사용하는 예제를 살펴보자.

( )는 ( ) 안에 있는 문자를 하나의 그룹으로 묶어 Hy, By 문자열을 찾는 것과 같은 의미다.

[]

[ ] 안에서 사용되는 문자는 기본적으로 | 와 동일하게 or의 의미를 가지며, [ ] 밖에서 사용하는 것과 다르게 안에서는 다르게 사용되는 경우가 있으니 주의해야 한다. [.]의 경우 밖에서 사용하는 것과 같이 임의의 문자를 뜻하는 것이 아닌 .(dot)의 의미를 가진다. 아래의 예를 통해 살펴보기 바란다.

[a-z]

[a-z]는 [ ]를 사용하는 특수한 경우로 범위를 지정하여 사용할 수 있으며, [0-9], [A-Z]등 여러가지로 사용할 수 있다.

아래의 예제는 대문자만 모두 찾기 위한 용도로 사용된다.

[^x]

[ ] 안에서 사용되는 ^는 밖에서 사용되는 ^와 다르게 not을 뜻한다.

^와 함께 사용되는 예제를 통해 알아보도록 하자.

^는 문자열의 시작을 뜻하는 것이고 [^a-z] 는 a-z를 제외한 문자열을 뜻한다.

둘을 조합해서 살펴보면 소문자로 시작하지 않는 문자열을 뜻한다. World는 문자열의 시작이 아니라 중간 부분이라 포함되지 않는다. 마지막으로 [ ] 밖에 있는 .은 임의의 한 문자이다.

\d

\를 사용하는 경우에도 특수한 기능을 하게 되는데, \d는 숫자에 대한 내용만 선택 [0-9]와 같은 의미

\D

대문자를 사용하는 경우 소문자와 반대의 경우가 선택되며 아래의 예에도 모두 같은 뜻으로 사용됨

\d와 반대로 숫자를 제외한 모든 것들이 선택

\w

word를 뜻하며 정규표현식에서는 알파벳, 숫자, _가 여기에 해당

\W

알파벳, 숫자, _를 제외한 것들이 선택

\s

공백문자를 뜻하며, 띄어쓰기와 tab가 포함

\S

공백문자를 제외한 것들이 선택

 

정규표현식은 모든 내용들을 조합하여 사용할 수 있으며, 이번 글에서 언급한 내용들이 전부는 아니며 참고자료에서 알아본 내용들을 예제와 함께 풀어낸 내용이다. 정규표현식에 대한 자세한 내용은 참고자료의 hama님의 블로그를 참고하시길 바란다.

 

정규표현식의 내용중 틀린 부분이 있을 수 있으니 참고용으로만 사용하시고 틀린 부분에 대해 댓글로 남겨주시면 수정하도록 하겠습니다.

 

2021-08-13 수정사항
\b, \B, \w, \W, \s, \S에 대한 내용 추가

 

참고자료

https://hamait.tistory.com/342

 

정규표현식 (Regex) 정리

정규표현식은 아주 가끔 쓰기때문에 항상 다시 볼때마다 헥깔리곤 하는데.. 주요 사용예를 정리하여 보았다. 나중에 찾아보기 편하라고~ 정규 표현식의 용어들 정규 표현식에서 사용되는 기호

hamait.tistory.com

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

https://wikidocs.net/4308

 

 

테스트 사이트

https://regexr.com/

'개발' 카테고리의 다른 글

Slack App 만들어 메세지 보내기  (0) 2021.09.11
GC(Garbage Collection)란?  (0) 2021.08.31
OLTP과 OLAP  (0) 2021.08.08
LDAP(Lightweight Directory Access Protocol)이란?  (0) 2021.08.01
CentOS 7 serviced 등록 및 실행  (0) 2021.05.17
Comments