일단 시작해보는 블로그

[Java] 정규표현식, Regular Expression 본문

개발/Java

[Java] 정규표현식, Regular Expression

Selina Park 2019. 9. 3. 10:01

정규표현식은 특정한 조건으로 문자를 검색하거나 바꿀 때 사용된다.

 

정규 표현식의 예

예를들어 다음과 같은 문자열이 있다고 보면,

String str = "안녕하세요. 저는 12345567입니다."; //너무 대충썼..

이 문자열에서 숫자만 남기고 다 지우고 싶을 때 다음과 같은 식을 쓰면 된다.

String result = str.replaceAll("[^0-9]", "");

 

여기서 [^0-9]가 정규표현식인데, 

[] -> 하나의 문자를 의미한다고 보면 편한데, [0-9]라면 0-9숫자, [a-z]는 소문자, [A-Z]는 대문자, [a-zA-Z]는 대소문자 중, 하나 이렇게 생각하면 된다.

0-9 -> 위에서 설명했듯, 범위이다.

^ -> 위의 표현식[^0-9]은 괄호 안에 ^ 표시가 있는데, 이는 반대를 의미한다. 따라서 0-9이외의 것을 의미한다고 보면 된다.

 

정규 표현식 정리

()

패턴들을 하나의 그룹으로 묶음

 

+

기호 앞의 패턴이 1번 이상 발생하는 패턴, 꼭 나타나야함.

ex) ^\S+ 라면 (공백없는 텍스트로 시작하고, 한글자 이상의 길이)

 

?

기호 앞의 패턴이 없거나 1번 발생하는 패턴 -> 0번 or 1번

 

*

기호 앞의 패턴이 없거나 1번 이상 발생하는 패턴 -> 0번 or 1번 이상 가능

 

.

모든 문자를 가리킴(\과 개행은 제외)

 

^

문자열(패턴)이나 행의 처음을 의미

 

$

문자열 (패턴)이나 행의 종료를 알린다.

 

[]

[] 사이에 들어간 문자 중 하나를 매치

[0-9a-zA-Z] -> 0-9, 소문자, 대문자 중 하나를 매치함을 의미한다.

 

[^ ] 

[]의 부정을 의미

 

\s

공백문자

 

\S

공백을 제외한 나머지 문자들 (공백 없는 텍스트 일 때 사용하게 된다.)

 

\w

"_"를 포함한, 영어와 숫자들

 

\W

"_"를 제외한, 영어와 숫자가 아닌 문자열들과 일치

 

\d

숫자를 일치시킨다.

[0-9]와 동일

 

\D

숫자가 아닌 모든 문자

 

{N}

정확히 N번 발생

 

{M,N}

최소 M번 이상, 최대 N번 이하로 발생하는 패턴

 

|

or연산을 의미한다. 예를 들어, (txt, doc)는 txt 또는 doc을 의미한다.

{N|M} -> N번 혹은 M번 발생

 

(?!)

대소문자를 구분하지 않음.

 

정규 표현식 예제

이메일 형식 체크, 파일 확장자 확인

 

1. 이메일 형식 체크

xxxx@xxxx.xxx 

String regex = "^[0-9a-zA-Z]+@[0-9a-zA-Z]+(\\.[_0-9a-zA-Z-]+)*$";

-> 여기서 특수문자인 '.'은 \.이렇게 표현하지만 한번 더 감싸준다. \\.

 

2. 전화번호 

010 혹은 02로 시작하는 번호

(02|010)-(02|010)-[\d]{3,4}-[\d]{4}

 

 

테스트 해보고 싶다면 

정규표현식을 쉽게 테스트해볼 수 있는 사이트를 추천합니다.

https://regexr.com/

 

 

 

 

[REFERENCE]

https://developer88.tistory.com/89

 

Comments