공부

정규 표현식 Regular Expression

heesang0930 2024. 6. 23. 22:07
728x90
반응형

Regular Expression

정규 표현식 Regular Expression

흔하게 Regex, Regexp로 부른다!

사전적 의미) 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
→ 패턴을 통해서 필터링을 할 수 있도록 하는 식!

정규 표현식의 기본 - 메타 문자

메타문자? 특정한 문자 및 문자 계열을 대신하여 표시하는 문자! → 특정한 규칙을 지닌 여러 단어를 하나의 패턴으로 축약할 수 있다.

^ : 문자열의 시작을 의미

$ : 문자열의 종료를 의미


정규 표현식의 기본 - 문자 클래스

\b : 문자열의 공백 사이를 의미. blank

\B : 문자열의 공백이 아니라는 것을 의미. \b의 의미와 반대의 의미

 

For Example)

\bplay\b → I want to play the game on the playground


\s : Tab, Null 등 모든 공백문자에 매칭. \t\n\r

\S : \s의 반대 의미

 

\d : 모든 숫자를 의미.

정규 표현식에서는 범위를 표시할 때, 0-9와 같은 방법으로 범위를 표시합니다. [0-9a-zA-Z]

\D : 숫자가 아닌 것을 의미

 

\w : 문자 자체를 의미. [a-zA-Z0-9_]와 동일한 의미

\W: \w에 포함되지 않는 모든 문자를 의미

"." : Wild Card. 모든 패턴에 일치


선택 패턴

Pipe | : OR의 의미

 

For Example)

 

mac | windows : mac이라는 문자열 또는 windows라는 문자열 패턴과 일치하는 모든 것

 

💡 근데, 한 글자만 달라지는 패턴도 사용하고 싶은데?

 대괄호를 통해서 여러 문자를 OR의 요소로 사용할 수 있다!

 

For Example)

[bcf]all Regex → ball, call, fall의 문자열 패턴에 매칭된다!


수량 한정자

수량 한정자를 통해서 특정 패턴이 N개 만큼 나올 수 있도록 정규 표현식을 설계할 수 있다!

? : 바로 앞의 글자 혹은 글자 그룹이 있을 수도 있고 없을 수도 있음.

For Example)

takes? : take 혹은 takes만 매칭

* : 바로 앞의 글자 혹은 그룹이 0개 이상이라는 의미

+ : 1개 이상이라는 의미

{n}: n개 이상이라는 의미

{n.m} : n개 이상 m개 이하를 의미


그룹 만들기

() 소괄호를 통해서 문자열의 그룹을 만들 수 있는데, 수량 한정자를 통해서 해당 그룹이 n번 만큼 반복되는 패턴을 설계할 수 있다!

(over|inst)all = overall | install : 두 개의 정규 표현식 모두 같은 의미.

(m|c){4}ap : mmmmap, ccccap와 같은 패턴.

이런 식으로 특정 그룹이 반복되는 경우, 정규 표현식을 통해 깔끔하게 표현할 수 있다!


전방 탐색과 후방 탐색

특정 문자열을 기준으로 앞이나 뒤를 찾고 싶다!

전방 탐색

?= 를 사용해서 다음에 오는 문자열을 기준으로, 이전의 문자열에만 해당 패턴을 적용한다!

 

For Example)

\w*(?=:) → https://www.google.com

후방 탐색

?< = 를 사용해서 다음에 오는 문자열 기준으로, 이후의 문자열에만 패턴을 적용한다!

 

For Example)

(?<=\$)[0-9.]+ → 초콜릿: $10.00

동시 사용

(?<=(<div>)).*(?=(<\\/div>)) → <div>123</div>


부정전방탐색과 부정후방탐색

어렵다…!

💡 긍정형 : 찾고자 하는 부분의 앞뒤를 지정해서 문자열 탐색
     부정형 : 지정한 패턴과 일치하지 않는 문자열 탐색

 

긍정형에서는 ?= , ?<= 같이 = 으로 긍정을 표현하고, 부정형에서는 ! 를 사용하여 부정을 표현

부정형 전방탐색

(?!)

For Example)

^((?!Hee).)*$→

Hwang Heesang (X)

Kim Heesang (X)

Kim MinSu (O)

특정 이름의 패턴이 들어가는 것을 방지할 수 있다!

부정형 후방탐색

(?<!)

For Example)

\b(?<!\$)\d+\b →

I paid $30 for 100 apples, 50 oranges, and 60 pears.

I saved $5 on this order.


 

정규 표현식 공부해보기

 

RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs

Regular expressions are extremely useful in extracting information from text such as code, log files, spreadsheets, or even documents. And while there is a lot of theory behind formal languages, the following lessons and examples will explore the more prac

regexone.com

정규 표현식 테스트

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

728x90
반응형