정규표현식

조상균·2021년 3월 4일
0
post-thumbnail

정규표현식이란?

  • 특정한 규칙이나 문자열의 찾는데 유용
  • 많은 프로그래밍 언어나 편집기가 지원함.
  • 대표적으로 회원가입 양식을 판별할 때 사용

정규 표현식의 사용

정규표현식은 대소문자를 구별한다.

^ : 줄의 시작에 있는 일치하는 문자를 찾음.

  • ^who ⇒ 줄의 처음에 who로 시작하는 문자를 찾음.

$ : 문자열이 끝나는 위치를 지정.

  • abc$ ⇒ abc로 끝나는 문자
  • /$ ⇒ $문자를 의미
  • ^/$ ⇒ $문자로 시작하는 것을 찾음.

. : 점의 갯수만큼 어떤 문자(특수문자,공백)이든 매칭. 와일드카드와 같음.

  • ...... ⇒ 어떠한 문자와 상관없이 6개를 대신하여 찾음.
  • O.K. 라는 문자열에 정규식으로 . 을 정규표현식으로 사용하면 O.K.이 한문자씩 모두 탐색됨.
  • .문자를 지정하려면 . 을 사용[문자] : 대괄호 안의 모든 문자를 찾아준다.
  • [oyu] ⇒ o, y, u 가 포함된 모든 문자를 찾는다.
  • [oyu]. ⇒ o나 y나 u로 시작하는 두문자를 찾는다.
  • [owy][yow] ⇒ 각 그룹에 한 문자씩 포함되어 있는 두 문자를 찾음. ex) oy, ww, oo 등
  • [C-K] ⇒ C와 K 범위 사이에 있는 한 문자를 탐색, [CDEFGHIJK]와 같다.
  • [C-Ka-d2-6] ⇒ C에서 K, a에서 d, 2에서 6 사이의 한문자 탐색

[^문자] : 괄호안에 있는 문자를 제외하고 탐색

  • [CDghi45] ⇒ CDghi45를 제외한 문자를 탐색
  • [^W-Z] ⇒ W부터 Z를 제외한 문자를 탐색

(문자들|문자들|문자들) : 괄호안에 포함되는 단어를 찾는다.

  • Monday Tuesday Friday 라는 소스가 있을 때.
  • (on|ues|rida) ⇒ Monday Tuesday Friday
    1. (Mon|Tues|Fri)day ⇒ Monday Tuesday Friday

*, +, ? : 수량자라고 하며 설명은 아래를 참고

  • ab ⇒ b문자 앞에 0부터 ∞ 만큼의 a문자가 올 수 있음을 의미(0~ ∞) b ab aab aaab*
  • a+b ⇒ b문자 앞에 무조건 한개 이상의 a문자가 올 수 있음을 의미(1 ~ ∞) ex) ab aab aaab
  • a?b ⇒ b문자 앞에 0 또는 1개의 문자가 올 수 있음을 의미(0 ~ 1) ex) b ab
  • .* ⇒ 공백앞에 .(어떤 한개의 문자)가 없을 수도 있을 수도 있음을 의미, 한줄 전체가 탐색된다.
  • -A- ⇒ -와 -사이에 A가 0~∞개가 있을 수 있음을 의미 ex) — -A- -AA-*
  • [-@] ⇒ - 또는 @가 0~∞개 올 수 있음을 의미 ex) -@ -@- @@ @-@ —-@*
  • *+ ⇒ ''문자가 한개 이상 올 수 있음을 의미 ex) * * *
  • -@+- ⇒ @문자가 하나 이상 올 수 있음을 의미 ex) -@- -@@- -@@@-
  • [^ ]+ ⇒ 공백이 아닌 문자를 하나 이상 탐색 ex) -@@@- * ""*

문자{숫자} : 괄호 안에 있는 숫자만큼의 문자를 탐색

  • .{5} ⇒ 어떠한 문자(.)든 다섯 문자를 탐색
  • [els]{1,3} ⇒ e, l, s의 조합으로 1~3개의 문자를 탐색
  • [a-z]{3,} ⇒ a~z문자에서 3개 이상인 문자조합을 탐색

수량자(*,+,?) 과 ?의 결합 : 수량자의 범위 중 최소값으로 탐색

  • r.* ⇒ r뒤 모든 문자들이 탐색된다.
  • r.? ⇒ 수량자와 ?가 합쳐지면(?) 최소 수량에 해당, ?(0~1)은 최소가 0이므로 .(아무문자)가 0개임을 의미. 결과적으로 r문자만 탐색한다.

조합

  • AB*A = AB{0,}A AB+A = AB{1,}A AB?A = AB{0,1}A
  • r.? ⇒ 아무문자가 0개 또는 1개 올 수 있음. ex) r ri rk rf
  • r.?? ⇒ ?(0~1)가 가지고 있는 최소(?)를 선택하여 r과 아무문자 0개를 탐색. 결론적으로 r문자만 탐색된다.

\w : word의 약자이며 a~z, A~Z, 0~9, 중 한개 문자를 의미. = [A-z0-9]
1. \w{5} ⇒ 문자 5개를 탐색

\W : \w(word)가 아닌 한개 문자를 의미

\d : digit의 약자이며 숫자 한개를 의미 = [0-9]

\b : word boundary의 약자이며 문자와 결합되었을때 단어의 앞이나 끝을 지정

  • \b. ⇒ 단어의 처음인 어떤 문자 한개(.)를 탐색한다. ex) cat concat
  • .\b ⇒ 단어의 끝인 어떤 문자 한개(.)를 탐색한다. ex) cat concat

\B : not word boundary이며 \b와 반대의 결과가 탐색된다.

  • \B. ⇒ 단어의 처음을 제외한 어떤 문자 하나(.) 를 탐색한다. ex) cat concat
  • \B.\B ⇒ 단어의 처음과 끝을 제외한 어떤 문자 하나(.)를 탐색한다. ex) cat concat

\A : 행의 시작을 의미

  • \A... ⇒ 행의 시작에서 문자 세개를 탐색한다.

\Z : 행의 끝을 의미

?=패턴 : 패턴을 활용하여 탐색

  • \w+(?=X): X문자를 이용하여 단어(word,\w)를 찾음. ex) AAAX-aaax-111
  • \w+ : 한개 문자 이상의 단어를 탐색한다. ex) AAAX-aaax-111
  • \w+(?=\w): 단어를 활용하여 문자가 한개 이상인 단어를 찾음 ex) AAAX-aaax-111

참고사이트

profile
백엔드 개발을 공부하고 있습니다.

0개의 댓글