정규표현식 (regular expression; regexp)

쓰옹·2022년 12월 16일
0

정규식

: 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어

표현방법

  • POSIX의 정규표현식과 거기서 확장된 Perl방식의 PCRE가 대표적임
  • 패턴(Pattern)은 대상 문자열과 일치시킴
    • 각 문자는 Meta문자(정규표현식에서 사용하는 기호)와 정규문자(리터럴)로 표현


메타문자의미예시
.1개의 문자와 일치
[]문자클래스
[^ ]문자클래스 안의 문자를 제외[^ab]c → ac, bc는 포함하지 않고 dc, ec 등을 포함
^문자열이나 행의 처음^x → 문자열은 x 문자로 시작
$문자열이나 행의 끝x$ → 문자열은 x 문자로 끝난다
( )하위식, 여러 식을 하나로 묶을 수 있다.“abc|adc” == “a(b|d)c”
*0회 이상 반복 문자 포함“a*b” → “b”, “ab”, “aab”, “aaab”를 포함
+1회 이상 반복“a+b” → “ab”, “aab” 포함. but “b”는 불포함
?존재 여부. 0 또는 1회“a?b” → “b”, “ab” 포함
{n}n회 반복“a{3}b”→ “aaab”
{n,}n회 이상 반복"a{3}b”→”aaaaaab”
{n, m}최소 n회 이상 최대 m회 이하 반복“a{1,3}b” → “ab”, “aab”, “aaab” 포함 but “aaaab”, “b”는 불포함
-범위[a-z] → 소문자 a~ z 사이의 문자 포함
\ddigit 숫자\d{3} → 숫자 3개 포함
\Dnot digit
\sspace 공백문자
\Snot space
\ttab
\wword 알파벳, 숫자, _
\Wnon word
  • Flag
    - 정규식으로 검색하려는 문자 패턴에 추가적인 옵션을 넣어 원하는 문자 검색 결과를 반환
    Flag의미
    gglobal 대상 문자열 내에 모든 패턴들을 검색
    iIgnore case 대상 문자열의 대/소문자 식별하지 않음
    mMulti line 대상 문자열이 다중 라인의 문자열인 경우에도 검색

사용예제

  • 이메일
    /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i
    • ^[0-9a-zA-Z] ;시작은 숫자,알파벳 대소문자로
    • ([-_.]?[0-9a-zA-Z])* ;- _ . 문자가 있을수도 없을수도 /
      숫자, 알파벳 대소문자 없거나 반복으로 나올 수 있음 /
    • @ ;@ 존재
    • [0-9a-zA-Z] ;숫자, 알파벳 대소문자
    • ([-_.]?[0-9a-zA-Z])* ;- _ . 문자가 있을수도 없을수도 / 숫자, 알파벳 대소문자 반복
    • .[a-zA-Z]{2,3}$ ;. 존재 / 알파벳 대소문자 2-3글자로 마무리
    • i ;문자열 대소문자 구분하지 않음
  • 핸드폰 번호/^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/
    • ^01 ;시작은 01
    • ([0|1|6|7|8|9]?) ;0 or 1 or 6 or 7 or 8 or 9 중 하나
    • -? ;- 존재할수도
    • ([0-9]{3,4}) ;숫자 3-4자리
    • -? ;- 존재할수도
    • ([0-9]{4})$ ;숫자 4자리로 마무리

정규표현식 테스트 사이트

이 사이트에서 만든 정규표현식이 잘 작동하는지 테스트 해볼 수 있다.





reference

profile
기록하자기록해!

0개의 댓글