[정규표현식] 정규표현식의 의미, 특징, 패턴 종류

ljkgb·2021년 2월 14일
5

1. 정규표현식의 의미

  • 정규표현식(正規表現式, Regular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단이다.

2. 정규표현식의 특징

1) 대소문자를 구분함
2) 띄어쓰기 수를 구분함

3. 정규표현식의 패턴

1) 기본패턴

패턴설명예시예시설명
^(캐럿)시작하는 문자열 찾음^W'W'로 시작하는 문자열 찾기
$(달러)끝나는 문자열 찾음W$'W'로 끝나는 문자열 찾기
.(애니)문자 or 숫자 or 공백 하나...문자열 길이가 3글자 이상인 것을 찾기
[](브라켓)[]안에 있는 문자열 찾음[dH].'d+문자(.)' or 'H+문자(.)' 문자열 찾기
-(레인지)해당하는 범위의 문자열 찾음A-C'A'부터 'C'까지
[^문자](부정)괄호 안에 문자를 포함하지 않는 문자열 찾음[^ABC]'A' or 'B' or 'C'를 제외한 문자열 찾기

2) 서브패턴

패턴설명예시예시설명
(|)(or)또는(on|yes|day)'on' or 'yes' or 'day' 문자열 찾기

3) 수량자(Quantifiers)

  • 수량자(Quantifiers): 어떠한 패턴이 얼만큼 등장하는가
수량자설명예시예시설명
*0개 이상 나타나는 문자a*b'a'가 앞에 있을수도있고 여러개 있을수도 있고 'b'도 뒤에 있을수도 있고 여러개 있을 수도 있음 'aab', 'ab', 'b'모두 가능
+1이상 나타나는 문자a+b'a'가 한개이상, 'b'도 한개 이상 있어야 함
?없거나 1개인 경우a?b'a'가 없거나 한개, 'b'가 없거나 한개
{m,n}m회 이상 n회 이하 나타나는 문자[els]{1,3}'e' or 'l' or 's'가 1개 이상 3개 이하
?없거나 1개인 경우a?b'a'가 없거나 한개, 'b'가 없거나 한개

4) 패턴의 활용

패턴설명
r.*?*뒤에 '?' 오면(수량자 뒤에 ?가 오면) *수량자의 가장 최소단위인 '0'을 뜻함 즉, r뒤에 '.'은 0이라는 뜻이라서 오직 'r'만 나타냄
r.+?'+' 수량자의 가장 최소 단위인 1을 나타냄 즉, 'r'과 'r' 다음 나오는 문자 하나
r.??'?'의 최소단위인 0을 나타내면서 오직 'r'만 나타냄

5) 탐욕적인 수량자(Greedy Quantifiers), 게으른 수량자(Lazy Quantifiers)

(1) 탐욕적인 수량자(Greedy Quantifiers)

  • 수량자 선택: <div>.+</div>
  • 대상: <div>test</div><div>test2</div>
  • 이중 'test'와 'test2'를 따로 선택하고 싶어도 위와 같이 수량자를 선택하면 <div>test</div><div>test2</div> 전체가 한개로 선택 됨 = Greedy Quantifiers

(2) 게으른 수량자(Lazy Quantifiers)
위의 예에서 수량자 선택을 <div>.+?</div> 이렇게 하게되면 만족하는 부분만 선택하게 됨(만족하는 부분이 여러개라면 여러개 선택 됨)-> 탐욕적인 수량자는 처음 만족하는 부분부터 마지막 만족하는 부분까지 모두 선택

6) 경계

  • []로 범위를 지정하는 것보다 간편한 방법
패턴설명예시예시설명
\w'w' = 문자,숫자, _ 의미
\w*0이상의 문자, 숫자, _ 의미
\W문자,숫자, _ 를 제외한 것 의미(w의 반대)
\d숫자의미
\D숫자를 제외한 모든 것

7) Assertions

패턴설명
\w+(?=X)'?='은 뒤에오는 문자로 검색해서 문자를 찾지만 선택에서는 제외하라는 뜻

4. 이스케이프(Escape)

  • Escape: 정규표현식 패턴이 아닌 문자로 사용하고 싶을때는 앞에 \(역슬래시)를 앞에 붙이기

*참고
생활코딩 강의: https://opentutorials.org/module/622/5143
사이트: http://zvon.org/comp/r/tut-Regexp.html#Pages~Contents
블로그: https://yurimkoo.github.io/analytics/2019/10/26/regular_expression.html

profile
🐹

0개의 댓글