본문 바로가기

IT/설계관련

정규 표현식 정리

완벽하게 이해 하지 않고 있어서 테스트시 어려움이 있었음.

https://school.programmers.co.kr/learn/courses/11

 

정규표현식

평가 5.0 79개의 평가 ★★★★★78 ★★★★1 ★★★0 ★★0 ★0 hyewon 2022.10.08 02:53 meena2003 2022.09.10 01:06 NordicStyleWhite 2022.08.23 20:23 김동우 2022.08.22 11:53 Jang-myoung-gyoon 2022.08.19 07:54 리뷰 더보기

school.programmers.co.kr

전화번호만 찾는 정규표현식

  • 0\d{1,2}[ -]?\d{3,4}[ -]?\d{3,4}

숫자 대표문자

  • \d는 숫자를 대표하는 정규표현식
  • d는 digit을 뜻합니다.

글자 대표문자

  • \w는 글자를 대표하는 정규표현식
  • a, b, c, 가, 나, 다, 1, 2와 같은 문자와 숫자를 포함합니다.
  • 특수문자는 포함하지 않지만, _(언더스코어)는 포함합니다.

하나 이상

  • \d+  는 "하나 혹은 그 이상 연결된 숫자"를 의미

0개 이상

  • *은 "0개 이상"이라는 뜻
  • \d*는 "숫자가 0개 이상이다"를 의미
  • 자연수는 [1-9]\d*로 표현할 수 있습니다.(0을 포함하고 싶을경우  [0-9]\d*)

있거나 없거나?(1)

더보기

전화번호는 "-"을 포함하거나, 포함하지 않을 수 있습니다.

021234567

02-123-4567

  • ?는 '있거나 없거나'라는 뜻
  • -?는 "-가 있거나 없다"를 의미
  • \d+-?\d+-?\d+ (전화번호를 찾는 정규표현식)

있거나 없거나?(2)

더보기

앞에서 배운 \d+-?\d+-?\d+ 정규표현식은 한계가 있습니다. "010 2454 3457"과 같이 공백이 포함된 전화번호를 찾을 수 없지요.

021234567

010 2454 3457

  • "-가 있거나 없다"는 조건이 아니라
  • "- 또는 공백이 있거나 없다"는 조건을 써야 합니다.
  • - 또는 (공백)이 있거나 없다는 조건은 [- ]?로 표현할 수 있습니다.
  • \d+[- ]?\d+[- ]?\d+

n번

  • {숫자}는 "숫자번 반복한다"는 뜻입니다. 예를 들어 \d{2}는 "숫자가 연속 두 번 나온다"는 뜻 
  • \d{2}[- ]?\d{3}[- ]?\d{4} 예) 00-000-0000 (〇), 02-123-4321(〇), 070-9999-9999(×)

n~m번

더보기

앞에서 배운\d{2}[- ]?\d{3}[- ]?\d{4} 정규표현식으로는 전화번호를 찾는데 한계가 있습니다. 전화번호의 첫 부분에 숫자가 3번(010 2454 3457) 나오는 경우를 인식하지 못하지요.

010 2454 3457

  • {숫자1, 숫자2}는 "숫자1부터 숫자2까지 반복한다"는 뜻
  • \w{2,3}는 "문자가 2 ~ 3번 나온다"는 뜻
  • \d{2,3}[- ]?\d{3,4}[- ]?\d{4} (처음 2 ~ 3자리, 가운데 3 ~ 4자리, 마지막 4자리)
  • 예) 00-000-0000 (〇), 02-123-4321(〇), 070-9999-9999(〇), 010 2454 3457(〇), 0030589-5-95826(×)

몇 개 중에 고르기

  • 알파벳 중에 소문자 모음(a,e,i,o,u)만 고르고 싶을 땐
  • 정규표현식에서 대괄호[ ] 안에 글자를 넣으면 해당 글자를 모두 선택할 수 있습니다.
  • [aeiou] 예) a,e,i,o,u만 출력

범위에서 고르기(1)

  • 소문자 알파벳만 고르고 싶을 땐
  • [a-z]는 "a부터 z까지 글자를 모두 선택하라"는 의미
  • [a-z] 

범위에서 고르기(2)

  • 연속된 영어 소문자를 찾으려면
  • 소문자를 뜻하는 [a-z]와 반복을 뜻하는 +를 붙여 => [a-z]+를 씁니다.

한글 고르기

  • 한글은 [가-힣]으로 찾을 수 있습니다
  • [가-힣]+ 예) 한글로 적어진 글자들을 출력
  • 단, 이 방식으로는 'ㄱㄴㄷ'이나 'ㅏㅑㅓㅕ'같은 낱글자는 찾을 수 없습니다. 

기타 대표문자

  • \s 공백 문자(스페이스, 탭, 뉴라인)
  • \S 공백 문자를 제외한 문자
  • \D 숫자를 제외한 문자
  • \W 글자 대표 문자를 제외한 글자들(특수문자, 공백 등)

자바 정규표현식

  • Java로 정규 표현식을 다룰 때에는 Pattern 클래스와 Matcher 클래스를 이용합니다.
  • 주의할 점: Java에서는 \ 대신 \\를 적어야 합니다.

자바스크립트 정규표현식

  • Javascript로 정규표현식을 다룰 때에는 String class의 match 함수를 이용할 수 있습니다.

자바스크립트 정규표현식

  • Javascript로 정규표현식을 다룰 때에는 String class의 match 함수를 이용할 수 있습니다.

정규화식 테스트 사이트

https://regex101.com/

http://regexr.com/

https://qiita.com/grrrr/items/7c8811b5cf37d700adc4

 

正規表現の基本 - Qiita

この記事は「IDOM Engineer Advent Calendar 2017」の22日目の記事として加筆編集しました。 0. 正規表現の学習の前に はっきり言って、正規表現は一度や二度じゃないぐらい学習しているつもりでい

qiita.com

기본 문자 규칙

매칭기호 Matches
\\ 백슬러쉬 문자 표현
\0n 8진수 값이 0n인 문자(0 <= n <= 7)
\0nn 8진수 값이 0n인 문자(0 <= n <= 7)
\0mnn 8진수문자. (0 <= m <= 3, 0 <= n <= 7)
\xhh 16진수 문자. 0xhh  hh는 16진수
\uhhhh 16진수 문자 0xhhhh
\t 탭(tab) ('\u0009')
\n 개행 ('\u000A')
\r 캐리지 리턴 문자('\u000D') CR
\f 폼피드 Form feed('\u000C')
\a alert 경고 문자
\e 이스케이프 문자('\u001B')
\cx x에 대응하는 제어문자

최장 일치 수량자

매칭기호 Matches
X? X、이전 요소를 0개 또는 1개 찾습니다.
X* X、이전 요소를 0개 이상 찾습니다.
X+ X、이전 요소를 1개 이상 찾습니다.
X{n} X、이전 요소를 정확히 n 회 찾습니다.
X{n,} X、이전 요소를 최소한 n 회 찾습니다.
X{n,m} X、이전 요소를 n 회 이상, m 회 이하로 찾습니다.

 

최단 일치 수량자

매칭기호 Matches
X?? X、이전 요소를 가능한 한 적은 개수로 0개 또는 1개 찾습니다.
X*? X、이전 요소를 0개 이상 가능한 한 적은 개수로 찾습니다.
X+? X、이전 요소를 1개 이상 가능한 한 적은 개수로 찾습니다.
X{n}? X、이전 요소를 정확히 n 회 찾습니다.
X{n,}? X、이전 요소를 최소한 n 회 이상 가능한 한 적은 개수로 찾습니다.
X{n,m}? X、이전 요소를 n 회에서 m 회 사이에서 찾으며, 가능한 한 적은 개수로 찾습니다.

논리 연산자

매칭기호 Matches
XY X 다음 Y
X|Y X 또는 Y 문자가 존재함
(X) 그룹을 표현하며 x 를 그룹으로 처리함

 

문자 클래스

매칭기호 Matches
[abc] a, b, c 중 하나를 포함
[^abc] a, b, c 이외의 문자
[a-zA-Z] a~z, A~Z 사이의 문자 모두 포함 
[a-d[m-p]] a~d 또는 m~p [a-dm-p] 결합
[a-z&&[def]] d, e, f 교차
[a-z&&[^bc]] b와 c를 제외한 a~z:[ad-z]
[a-z&&[^m-p]] m~p를 제외한 a~z:[a-lq-z]

정의 되어있는 문자클래스

구분 Matches
. 임의의 문자
\d 숫자: [0-9]
\D 숫자이외: [^0-9]
\s 공백:[ \t\n\x0B\f\r]
\S 공백아닌문자:[^\s]
\w 문자 또는 숫자:[a-zA-Z_0-9]
\W 문자 또는 숫자가 아닌 문자:[^\w]

위치 정규식 

구분 Matches
^ 행의 선두
$ 행의 끝
\b 단어의 경계를 나타내는 문자
\B 단어 내에서 문자의 경계가 아닌 문자.
\A 문자열의 시작점과 일치(내부 줄이 아닌)
\G 일치는 이전 일치가 종료된 위치 또는 이전 일치 항목이 없는 경우 일치가 시작된 문자열의 위치에서 시작
\Z 문자열 끝나는 지점
\z 문자열의 끝과 일치 (내부 줄이 아닌)

참고사이트

https://qiita.com/grrrr/items/7c8811b5cf37d700adc4

https://learn.microsoft.com/ko-kr/dotnet/standard/base-types/regular-expressions

 

반응형