ABOUT ME

Today
Yesterday
Total
  • [Java] 정규표현식(Regular Expression, regex)
    개발 지식/Java 2023. 7. 27. 14:56

    정규표현식이란?

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

     

     

    정규표현식 문법

    정규표현식 설명
    ^ 문자의 시작(한 줄 기준)
    $ 문자의 끝(한 줄 기준)
    . 모든 문자
    \\w 문자만 허용(여기서 문자는 영문, 숫자 _를 의미)
    \\W 문자가 아닌 경우에만 허용
    \\d 숫자만 허용
    \\D 숫자가 아닌 경우에만 허용
    \\s 공백 문자만 허용
    \\S 공백 문자가 아닌 경우에만 허용
    \\b 문자와 문자가 아닌 것의 경계
    \\B \\b와 반대로 동작
    * 앞의 대상이 0개 이상
    + 앞의 대상이 1개 이상
    ? 앞의 대상이 0개 또는 1개
    {n} n개
    {n,} n개 이상
    {n, m} n개 이상 m개 이하
    () 특정 그룹
    [a-zA-Z] 괄호안의 어떤 문자든
    [^a-z] 괄호안의 문자들은 제외

     

    특수한 상황

    - 수량자(*, +, ?) 뒤에 ?를 붙이게 되면 특수한 성질이 생기게 된다.

     

    1. 앞의 수량자의 최소 범위가 선택되어진다.

    *?의 경우 0개를, +?의 경우 1개를, ??의 경우 0개를 의미한다.

    예) r.*? 의 경우 *의 의미가 0개를 의미하여 r 뒤에 어떠한 문자도 오지 않는 패턴을 의미하게 된다.

     

    2. 게으른(lazy) 선택자가 된다.

    greedy 선택자 vs lazy 선택자 예시

     

    타겟 kim..gim..kim..gim 이면

    정규표현식이 kim.+gim 인 경우에 탐욕적인 선택자가 되어 타겟 전체를 선택하지만

    kim.+?gim 인 경우에는 게으른 선택자가 되어 kim..gim만을 선택하게 된다.

     

     

    ^, $ 와 \A, \Z 의 차이

    ^, $ 와 \A, \Z 의 차이는 멀티라인의 경우 전자는 각 라인마다 타겟을 지정하지만 후자는 전체 멀티라인의 처음과 끝만을 지정한다.

     

     

    ?= 의 의미

    ?=는 문자열을 검색하는데 사용하지만 직접 포함은 하지 않는 기능을 한다.

    예) \w+(?=X) 의 경우 타겟 AAAX에서 AAA만을 포함하게 된다.

     

    정규표현식 예제

    1. 한글만

     

    2. 이메일

     

    3. 전화번호

     

    4. 비밀번호

    - 영문, 숫자, 특수문자를 포함하여 8자리 이상 24자리 이하의 비밀번호의 유효성 검사를 하고 싶을 때 위와 같이 두 가지 정규표현식을 세울 수 있다. 언뜻 보면 비슷해보이지만 두 정규식의 가장 큰 차이는 영문, 숫자, 특수문자가 각각 적어도 1개 이상 필수로 포함되어 있는지를 확인하는 것이다.

     

     

     

    등등...

     

     

Designed by Tistory.