본문 바로가기

낙서장/Java

자바 기초 정규식 정리

정규표현식 문법

정규 표현식 설명
^ 문자열 시작
$ 문자열 종료
. 어떠한 한 문자
[ ] - 대괄호 안에 문자 하나를 찾는다. 
- - 기호 사용하면 두 문자 사이의 범위에 존재하는 문자를 찾는다.
- 대괄호 안에 ^ 사용하면 NOT으로 인식하여 반대되는 문자를 찾는다.
EX) [a-zA-z0-9]
( ) - 괄호 안에 문자열을 찾는다. ==> ( | 사용하여 여러 개를 찾을 수 있음. ) 
EX) (apple | samsung | mincro)
| 패턴 안에서 or  연산을 수행한다.
수량자(Quantifier)
* 0 ~ 1 ~ 多 = 문자가 없을 수도 많을 수도 있다.
+ 1 ~ 多 = 문자가 하나 이상이 있다.
? 0 ~ 1 = 문자가 없거나 하나가 있다.
{ } 중괄호 안에는 값의 길이를 지정한다.
EX) [a-z]{4} = 4글자 단위로 a~z 포함된 문자를 찾는다.
탐욕적 수량자 - 탐욕적 수량자는 예제와 같이 <div> 시작점 부터 마지막 </div>를 인식해서 찾는 방법이다. 
EX)<div>.+</div>
<div>test</div><div>test2</div>
게으른 수량자 - 게으른 수량자는 예제와 같이 <div> = 시작되는 문자 </div> = 끝나는 문자의 영역으로 단위별로 나뉜다. (+? =+의 의미가 1 ~ 多 에서 1로 바뀜. )
EX)<div>.+?</div>
<div>test</div><div>test2</div>
Character Class
\w - 알파벳이나 숫자를 찾는다.
- 대문자 W 반대로 알파벳이나 숫자를 제외한 문자를 찾는다.
\s - 공백 문자를 찾는다.
- 대문자 S 반대로 공백 문자를 제외한 문자를 찾는다.
\d - 숫자를 찾는다 = [0-9] 같다.
- 대문자 D 숫자를 제외한 문자를 찾는다.
\b - 단어의 시작점을 찾는다
- 대문자 B 단어의 시작점이 아닌 문자를 찾는다. 
EX) \ba = apple air api
EX) t\b = test token ert
EX) \Ba = apple air apia
\A - 입력의 시작 부분 찾는다.
- ^ 차이점 = ^a 라인별 시작점 a를 찾는다. \A 첫 라인의 시작점에서만 찾는다
EX) ^a
apple
air
ajax   
EX)\Aa
apple
air
ajax
\Z 입력의 끝 부분을 찾는다.
- $ 차이점 = $a 라인별 끝점 a를 찾는다. \Z 마지막 라인 끝점에서만 찾는다.
EX) a$
ha
pa
da
EX) a\Z
ha
pa
da
(?=[문자]) 문자를 검색할 때는 문자를 사용 하지만 선택 될 때는 문자를 제외한다.
EX) AAA(?=X)
AAAX---AAA
(?![문자]) 문자를 검색할 때 뒤에 문자가 포함되지 않은 문자를 찾는다.
EX) AAA(?!X)
AAAX---AAA

자바는 \ 표현하려면 \\ 사용해야 합니다.
java String.replaceAll()
전화번호 String str = "01012341234"
str.replaceAll("(^[0-9]{2,3})([0-9]{3,4})([0-9]{4})$", "$1-$2-$3")

console =  010-1234-1234
java String.matches
전화번호 패턴 검사 String str = "01012341234"
String str2 = "010-1234-1234"

String pattern = "(^[0-9]{2,3})-([0-9]{3,4})-([0-9]{4})$";

str.matches(pattern);
str2.matches(pattern);

console =  false <-- str
               true <-- str2
이메일 패턴 검사 String str = "@gmail.com"
String str2 = "test@gmail.com"
String str3 = "test@gmail.co.kr"
String str4 = "test@gmail.co.kr.a"

String pattern = "^\\w+@\\w+\\.\\w+(\\.\\w+)?$"

str.matches(pattern);
str2.matches(pattern);
str3.matches(pattern);
str4.matches(pattern);

console = false
              true
              true
              false
문자열 바이트 길이  var pattern = /[\u0000-\u007f]|([\u0080-\u07ff]|(.))/g;

 str.replace(pattern, '$&$1').length;

정규식 기초 교육 사이트 : http://zvon.org/comp/r/tut-Regexp.html#Pages~Contents

정규식 테스트 사이트 : https://regex101.com/

 

 

replace(치환)

변수.replace(”찾을 문자열”, “변경할 문자열”);

  • 문자열 변수의 특정 문자를 제거하거나 모든 공백을 없앨 때 사용.
  • .replace()는 찾을 문자열 1개만 치환되기 때문에 자바의 .replaceAll()처럼 사용하기 위해서는 정규식을 사용.

옵션

g 모든 패턴 체크(global)
i 대소문자 구별없이 체크
m 여러 줄 체크
s “dotAll”; 줄 바꿈과 일치 하는 . 을 허용
^ 처음
$
. 한 문자

▶ 정규식을 활용한 특정 문자 제거

► 변수.replace(/찾을 문자열/gi, "변경할 문자열")
.replace(' ','')          : 첫번째 공백 제거
.replace(/\-/g,'')        : - 제거
.replace(/[-]/g,'')        

.replace(/,/g,'')         : , 제거
.replace(/^\s+/,'')       : 앞의 공백 제거
.replace(/\s+$/,'')       : 뒤의 공백 제거
.replace(/^\s+|\s+$/g,'') : 앞뒤 공백 제거
.replace(/\s/g,'')        : 문자열 내의 모든 공백 제거
.replace(/\n/g,'')        : 개행 제거
.replace(/\r/g,'')        : 엔터 제거