정규식, 어렵지 않게 사용하기 - 기본

2020. 7. 7. 15:01BACKEND/Linux

알고리즘을 하다보면 한 번쯤 정규식을 사용해보셨을 것 같아요.

혹은 한 번쯤 들어봤을 법한데요.

오늘은 정규식을 파헤쳐보는 시간을 갖겠습니다 ✨

 

****************  INDEX  *****************

 

<1부>

🌈 정규식❓ 

🎡 정규식 사용하기 - 기본 

 

<2부>

🤖 정규식 사용하기 - 심화

 

<3부>

🔥 JS & JAVA + Regex

 

******************************************** 

 


 

정규식이란❓ 

정규식(Regular expressions, Regex)은 텍스트에서 원하는 정보를 추출하기 위한 표현식입니다.

특정 검색 패턴을 사용하여 텍스트 내부의 데이터를 추출하죠. 

 

예를 들어 "gngsn@gmail.com" 라는 텍스트가 있을 때, 도메인을 제외한 아이디 값만을 가져오고 싶을 때 어떻게 해야할까요?

javascript나 python, java 등에서 문자열을 다양한 방식으로 split할 수 있는 메소드를 지원해주고 있습니다.

이런 메소드들로 아주 간단한 문자열 parsing은 가능하겠지만, 

조금 더 복잡하게 문자열을 검색하고 싶을 때에는 반드시 사용할 수밖에 없습니다.

 

뿐만아니라, 표현식이 복잡하지 않아서 한 번 알아두면 매우 유용하게 사용할 수 있습니다.

또, 대부분의 언어에서 정규식을 사용할 수 있기 때문에 활용도가 매우 높습니다.

 

이제 정규식을 어떻게 사용하는지 같이 알아보도록 하겠습니다❗️ 

 

 

블로그를 보면서 정규식을 연습하고 싶다면 regExr를 추천해드립니다!

정규식을 연습하기 좋은 사이트이며, 위 링크 이외에도 regex101 도 있습니다 〰️ 

 

혹은 정규식을 배우기 좋은 사이트로 regexone 가 있으니 참고하시면 좋을 것 같아요 ❗️ 

 

 

 

정규식 사용하기 🎡

✔️  letters

기본적인 문자로 알파벳, 숫자, 한글을 검색하는 아주 기초적인 방법을 알아보겠습니다.

 

더 캄캄한 이곳에 shine like the stars
그 미소를 띠며 I'll kiss you goodbye

실컷 비웃어라 꼴좋으니까
이제 너희 1 2 3

// how you like that 가사 일부

 

 

정해진 문자열

 

위와 같은 스트링에서 원하는 스트링만을 검색할 땐, 단순히 원하는 스트링을 적기만 하면 됩니다. 

만약 '미소'라는 단어를 갖고 오고 싶다면, 아주 간단하게 정규식에 "미소"만 적어줍니다.

>> 실습

 

정해지지 않은 문자열

'한글'만, '알파벳'만, 혹은 '숫자'만 검색하고 싶을 때엔 어떻게 해야할 지 같이 살펴보도록 하겠습니다.

 

✔️  \d    \s   \w 

\d 숫자 하나와 매칭합니다.    >> 실습

\w 는 문자(숫자, 영문, 언더바) 하나와 매칭합니다.   >> 실습

\s 는 공백문자(탭, 줄바꿈, 스페이스) 하나와 매칭합니다.   >> 실습

 

 

✔️  \D   \S   \W 

이번에는 소문자가 아닌 대문자로 검색을 해볼게요 〰️ 

뭐가 달라질까요❓ 

대문자가 되면 반대의 의미가 됩니다.

 

\D숫자가 아닌 것들을 모두 매칭합니다.     >> 실습

\W문자(숫자, 영문, 언더바)가 아닌 것들을 모두 매칭합니다.  >> 실습

\S 공백문자가 아닌 모든 것들을 매칭합니다.   >> 실습

 

 

✔️  . (온점)

온점은 어떤 것을 뜻할까요? 바로 글자 하나를 의미합니다.   >> 실습

실제로 온점은 단 하나로 사용하지 않고 앞/뒤에 다른 정규표현식을 같이 붙여서 사용하곤 합니다.

 

그런데 만약, 문자열에 포함되어있는 온점을 검색하고 싶을 때에는 어떻게 해야할까요?

\. 을 사용하면 됩니다.    >> 실습

 

✔️  |   []

|  OR operation을 사용하고 싶을 때 유용합니다.  >> 실습

 

[] OR operation의 확장으로, 다양한 조건의 문자열을 검색할 수 있습니다. 

지정된 문자를 검색할 수도 있고, 포함하지 않을 문자열을 포함할 수도 있으며 범위를 지정할 수도 있습니다.

 

활용도가 높은 표현식 인만큼, 아래를 통해 조금 더 알아보도록 하겠습니다.

[abc] a, b, c에 해당하는 문자를 매칭합니다.   >> 실습

[^abc] a, b, c에 해당하지 않는 모든 문자를 매칭합니다.   >> 실습

[a-z]문자 알파벳에 해당하는 문자를 매칭합니다.   >> 실습

[a-zA-Z] 모든 알파벳을 매칭합니다.   >> 실습

 

 

 

✔️ ^    $

특정 문자열로 시작하는 데이터를 검색하고 싶을 때 있을 수 있는데요.

예를 들어 url을 가져오고 싶을 때, 'http'로 시작하는 데이터를 검색하고 싶을 때에는 어떻게 해야할까요❓ 

 

^ 는 시작점을 표시해줍니다.

예를 들어 ^http 라고 표시하면 맨앞에 http가 있는 것만 검색하죠.     >> 실습

 

$ 는 반대로 종료점을 표시해줍니다.

'com'으로 끝나는 문자열을 검색하고 싶으면, 'com$'으로 표시합니다.    >> 실습

✔️  *   +   ? 

검색의 길이(양)을 설정하고 싶을 때에는 위와 같은 기호들을 사용하게 됩니다.

아래에서 조금 더 자세히 확인해보도록 하겠습니다.

 

* 0개 이상의 문자열과 매칭합니다.

없어도 되거나 여러개의 문자열이어도 되는 문자나 괄호뒤에 붙여줍니다.

예를 들어 ab* 를 하면 a부터 a, ab, abb, abbb 가 모두 매칭됩니다.    >> 실습

 

+ 1개 이상의 문자열과 매칭합니다.

최소 하나의 문자부터, 여러개의 문자열이어도 되는 문자나 괄호뒤에 붙여줍니다.

예를 들어 ab+라고 하면 ab, abb 등이 매칭되지만, a는 매칭되지 않습니다.      >> 실습

 

? 0개 혹은 1개의 문자열과 매칭합니다.    

예를 들어 ab? 라고 하면, a, ab 가 매칭됩니다.   >> 실습

 

 

✔️  { }

{range} 범위를 지정하여 해당하는 문자열과 매칭합니다.

 

👉🏻 ab{n} a를 포함하고, n개의 문자 b가 있는 문자열과 매칭합니다.

예를 들어 ab{2} 는 abb 만 매칭합니다.   >> 실습

 

👉🏻 ab{n, } a를 포함하고, 최소 n개의 문자 b가 있는 문자열과 매칭합니다.

예를 들어 ab{2,} 는 abb, abbb, abbbb 등을 매칭합니다.   >> 실습

 

👉🏻 ab{n, m} a를 포함하고, 최소 n개 최대 m개의 문자 b가 있는 문자열과 매칭합니다.

예를 들어 ab{2,4} 는 abb, abbb, abbbb 등을 매칭하지만, ab, abbbbb는 매칭하지 않습니다.   >> 실습

 

 

✔️  (  )

() 는 캡처 그룹을 만듭니다.

 

() 캡쳐 그룹을 생성합니다.      >> 실습

(?: ) (?: )는 매칭만 하고 캡쳐 그룹을 생성하지 않습니다.      >> 실습

 

(?<cn> ) 캡쳐 그룹에 capture name을 지정합니다.

예를 들어 a(?<alpha>bc) 를 하면 'alpha'라는 그룹 이름을 가진 그룹 'bc'를 캡처할 수 있습니다.       >> 실습

 

 

여기서 짚고 넘어갈 것은 중괄호 내부에 있는 것만 캡처한다는 점이죠 〰️ 

 

 

 

 

자, 그럼 첫 번째 주제는 여기까지 쓰도록 하겠습니다.

포스팅에 있는 것만 알아도 되지만, 다음 포스팅에는 알면 좋은 표현식과 참고하기 좋은 표현을 알아보도록 하겠습니다 😆

 

 

'BACKEND > Linux' 카테고리의 다른 글

LINUX, 사용자 사용량 관리하기  (0) 2020.09.03
LINUX, 특수 권한  (2) 2020.09.03
LINUX, 권한 관리하기  (0) 2020.08.28
정규식, 제대로 사용하기 - 심화  (4) 2020.08.16
Vi, 어렵지 않게 시작하기  (2) 2020.01.24