정규표현식

임준철·2021년 3월 14일
1

JavaAdvanced

목록 보기
8/15

정규표현식(Regular Expression)

정규표현식이란?

  • 문자열을 다루는 패턴화된 작업을 정의하는 수식
  • 문자열 매칭, 템플릿 일치 여부 확인, 템플릿 매칭 검색(문서가 있을 때 이메일만 뽑는 작업을 할 때 등등)
  • 정규표현식은 느리기 때문에 남용하면 안된다. 많은 동작을 돌리면 안된다. 알고리즘 문제를 정규표현식을 푸는건 적합하지 않음
  • 특정 조건에 맞는 문자열을 검색(search) / 치환(Replace)를 하는 패턴 기반의 식( 패턴: 전화번호 같은 것, 이메일)
  • 이메일, 전화 번호 등 특정한 형식에 맞게 적혀 있는지 Validation 하는데 사용 가능
  • Crawling(자료를 긁어 모으는 것) 등 날 것의 자료를 긁어 모았을 때 정리 하는데 유용
  • 튜브 댓글이 있으면 형식에 따라 분석을 하고 구분을 할 수 있다.

정규표현식 표현 방법

  • 정규 표현식의 기본 작성 방식
"/패턴/[플래그(Opt.)]"
  • 기본 메타 문자

    메타 문자의미
    ^xx로 시작
    x$x로 끝
    .xx앞에 하나의 문자가 있다.
    x+x가 1번 이상 반복
    x?x가 있거나 없다.
    x*x가 0번 이상 반복
    .아무 문자 하나를 의미
  • 괄호의 활용

    regexp의미
    (xy)괄호 안의 내용을 그룹화
    x{n}n번 반복됨
    x{n,}n번 이상 반복됨
    x{n, m}n번 이상, m번 이하 반복됨
    [xy]x 또는 y
    [a-z]알파벳 소문자 (a~z)
    [0-9]숫자
    [가-힣]한글
    [^x]x가 아닌 것
    [^0-9]숫자가 아닌 것
  • \... 축약 문자

    regexp의미
    \^,\....\ 뒤에 나오는 문자를 문자로 처리
    \b단어의 경계를 찾는다.
    \B단어의 경계가 아닌 것을 찾는다.
    \d숫자를 찾는다.
    \D숫자가 아닌 것을 찾는다.
    \s공백 문자를 찾는다.
    \S공백 문자가 아닌 것을 찾는다.
    \w[a-zA-Z0-9_]
    \W[^a-zA-Z0-9_]
  • 유용한 정규식 예

    • 한글 이름 : ^[가-힣]{2,5}$
    • 핸드폰 번호: ^01(0|1|2|6|9)[-\s]?\d{3,4}[-\s]?\d{4}$
    • 이메일 주소: ^[\w\.-]{1,64}@[\w\.-]{1,252}\.\w{2,4}$

Flag

Flag기능
g문자열 내 모든 패턴을 찾음
i대소문자를 구분하지 않음
m문자열의 모든 줄에서 찾음

정규표현식을 사용하는 클래스

Pattern 클래스

메소드설명
publicstatic Pattern compile(String regex) Pattern 객체를 생성
publicMatcher matcher(CharSequence input) 입력을 분석하는 Matcher 객체 생성
publicstatic boolean matches(String regex, CharSequence input) 입력이 regexp에 해당하는지 판단

Matcher 클래스

메소드설명
find()정규표현식에 부합되는 내용이 문자열에 포함되어 있는지 반환. 이전 검색 위치부터 이어서 검색.
start()패턴에 부합되는 요소의 시작 인덱스 반환
end()패턴에 부합되는 요소가 끝나는 위치 + 1을 반환
matches()문자열 전체가 정규표현식에 일치하는지 반환
lookingAt()비교하려는 문자열이 정규표현식으로 시작하는지 반환. 0번 인덱스부터 검색.
replaceFirst()일치하는 첫 패턴을 문자열로 대체
replaceAll()일치하는 모든 패턴을 문자열로 대체
reset()Matcher의 정보를 리셋하여 0번 인덱스부터 다시 검색

참고

profile
지금, 새로운 문을 열자! 문 저편에 무엇이 있을지 두렵더라도!!

0개의 댓글