정규표현식(正規表現式, Regular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '추출', '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단이다.


- 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴






 분류

 

관련 문법 내용

기  호

의  미

기본 메타 문자

.

 모든 문자와 일치 (한 문자)

|(버티컬 바)

 왼쪽 혹은 오른쪽과 일치

[^]

 문자 집합 구성원 중 하나와 일치

-

 문자 집합 구성원을 제외하고 일치

\

 다음에 오는 문자를 이스케이프

수량자

*

 문자가 없는 경우나 하나 이상 연속하는 문자 찾기

*?

 게으른 * 문자

+

 문자 하나 이상 찾기

+?

 게으른 + 문자

?

 문자가 없거나 하나인 문자 찾기

{n}

 정확히 요소와 n번 일치

{m, n}

 요소와 m에서 n번 일치

{n, }

 요소와 n번 이상 일치

{n, }?

 게으른 {n, }

위치 지정

^

 문자열의 시작과 일치

\A

 문자열의 시작과 일치

$

 문자열의 끝과 일치

\Z

 문자열의 끝과 일치

\<

 단어의 시작과 일치

\>

 단어의 끝과 일치

\b

 단어의 경계와 일치

\B

 \b와 반대로 일치

특수한 문자

[\b]

 역 스페이스

\c

 제어문자와 일치

\d

 모든 숫자와 일치

\D

 /d와 반대

\f

 페이지 넘기기 (form feed)

\n

 줄바꿈

\r

 캐리지 리턴

\s

 공백 문자와 일치

\S

 \s와 반대로 일치

\t

 탭

\v

 수직 탭

\w

 영숫자 문자나 밑줄과 일치

\W

 \w와 반대로 일치

\x

 16진수 숫자와 일치

\0 (숫자)

 8진수 숫자와 일치

     역참조와

   전후방 탐색

( )

 하위 표현식 정의

\1(숫자)

 첫번째 일치한 하위 표현식,

 두번째로 일치한 하위 표현식은 \2로 표기하는 방식

?=

 전방탐색

?<=

 후방탐색

?!

 부정형 전방탐색

?<!

 부정형 후방탐색

?(backreference)true

 조건 지정

?(backreference)true|false

 else 표현식 조건 지정 

대소문자 변환

\E

 \L 혹은 \U 변환을 끝냄

\I

 다음에 오는 글자를 소문자로 변환

\L

 \E를 만날 때까지 모든 문자를 소문자로 변환

\u

 다음에 오는 글자를 대문자로 변환

\U

 \E를 만날 때까지 모든 문자를 대문자로 변환

변경자

(?m)

 다중행 모드
















































































자주 사용되는 정규표현식



숫자[ 0 ~ 9 ]

 ^[0-9]+$

 이메일 형식만 가능

 ^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$

 한글

 ^[가-힣]+$

 한글+공백

 ^[가-힣]\s+$

 영문

^[a-zA-Z]+$

 한글+영문

^[가-힣a-zA-Z]+$

 영문+숫자

 ^[a-zA-Z0-9]+$

 휴대폰 번호

^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$

 주민번호 (- 포함)

 ^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$

 url ( protocol 포함)

 /^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$

 주석

 \/\/.*

 적어도 소문자 하나대문자 하나숫자 하나가 포함되어 있는 문자열(8글자 이상 15글자 이하)

 (?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}








Java  Example



자바에서 정규표현식과 함께 사용할 수 있는 클래스 및 인터페이스 다음과 같다.


(1) Pattern class

(2) Matcher class

(3) Match Result Interface



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Regex {
 
    public static void  main(String[] args) {
        //영문+공
        String regex = "^[a-zA-Z\\s]+$";
        
        String input = "Hello World";
        
        boolean matches = Pattern.matches(regex,input);
        
        //true
        System.out.println(matches);
        
        //찾고자하는 문자 + 공백 
        String findRegex = "Hello\\s";
        
        Matcher matcher = Pattern.compile(findRegex).matcher(input);
        
        while(matcher.find()) {
            System.out.println(matcher.group()); // Hello + 공백 출력
            
            String changeData = matcher.replaceAll("Change");
            System.out.println(changeData);
        }
    }
}
 
cs



>>true

>>Hello 

>>ChangeWorld





http://blog.daum.net/creazier/15309380

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

'기타' 카테고리의 다른 글

Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03
DDD(Domain Driven Design)  (0) 2018.10.14
단축URL 서비스  (0) 2018.07.08
Cheat Sheet  (0) 2018.06.13

+ Recent posts