정규표현식이란?
특정 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식 언어
Ex) 전화번호, 이메일, 주민 번호 등!
개발할 때 형식대로 제대로 입력했는지 검증할 경우에 정규표현식을 사용하여 쉽게 구현할 수 있다!
정규표현식 기호 별 의미
^ | 문자열의 시작, [ ] 안에 쓰일 경우 not을 의미! |
$ | 문자열의 끝 |
. | 임의의 한 문자 |
* | 문자가 0번 이상 발생 |
+ | 문자가 1번 이상 발생 |
? | 문자가 0번 혹은 1번 발생 |
[ ] | 문자의 집합 범위 [0-9] : 숫자 0부터 9 [a-z] : 알파벳 소문자 a 부터 z |
{ } | 횟수 또는 범위 |
( ) | 소괄호 안의 문자를 하나의 문자로 인식 |
| | OR |
\ | 확장 문자의 시작 |
\b | 단어의 경계 |
\B | 단어가 아닌 것의 경계 |
\A | 입력의 시작부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
\s | 공백문자 |
\S | 공백문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | 숫자만! [0-9]와 동일하다 |
\D | 숫자를 제외한 모든 문자 |
Pattern 클래스
정규식을 사용하기 위한 객체
* 선언 코드
import java.util.regex.Pattern;
- java.util.regex.Pattern를 import하면 사용할 수 있다.
Pattern 클래스 주요 Method
String형으로 들어온 정규식을 Pattern객체로 바꿔주는 - complie()
- static Pattern compile (String regex [, int flags])
import java.util.regex.Pattern;
public class stringCheck {
static public void main(String[] args) {
String REGEX = "([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))";
Pattern pattern = Pattern.compile(REGEX);// pattern 객체로 만들어주기
System.out.println(pattern);
}
}
String으로 선언해준 정규식을 Pattern 객체로 만들어 준것이다!
위 compile함수에 전달 되는 인자를 잘 보시면 flags라는 것도 있는데 어떤 것일까?
정규식을 매칭하는 방식에 비트 마스크를 적용하는 것이다.
궁금하다면 여기 클릭!!
[정규식] Methods of the Pattern Class
스크랩 : http://neokido.tistory.com 지금까지 우리는 test harness를 이용하여 패턴 객체를 생성하고 그들의 기본 폼을 이용하였다. 이번 섹션에서는 좀더 향상된 기술로 플래그와 함깨 패턴을 생성하거
egloos.zum.com
컴파일된 정규표현식을 String 형태로 변환하는 - pattern()
- public String pattern()
이 함수는 예제가 잘 없다.. 그래서 여기 만들어본다.
import java.util.regex.Pattern;
public class stringCheck {
static public void main(String[] args) {
Pattern ptn = Pattern.compile("([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))"); //complie된 정규 표현식!!
//위 표현식을 String으로 받아오고 싶다면?
String ptn_str = ptn.pattern();
System.out.println(ptn_str);// ([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))
}
}
이렇게 사용하는 것이다.. 처음에 Pattern으로 선언한 표현식을 String으로 받아오고 싶다면 사용하면 된다!!
+ compile된 것에서 쓸 수 있는 함수들..
asPredicate(); | 문자열을 일치시키는데 사용할 수 있는 Predicate 작성 |
split(CharSequence input); | 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리 |
패턴을 매칭하여 결과를 boolean으로 반환해주는 - matches()
- public static boolean matches (String regex, CharSequence input)
import java.util.regex.Pattern;
public class regex {
static public void main(String[] args) {
String REGEX = "([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))";
String INPUT = "010-1234-5678"; // 형식에 맞게 작성한 전화번호
String INPUT2 = "010-1-11"; // 형식이 틀린 전화번호
System.out.println(Pattern.matches(REGEX, INPUT)); // true
System.out.println(Pattern.matches(REGEX, INPUT2)); // false
}
}
이것도 역시 간단하다! 첫 번째 인자로 정규식 표현을 넣어주고 두번째 인자로 검증할 값을 넣어주면 된다!
INPUT의 경우 형식이 맞으므로 true를 반환하였고 INPUT2의 경우 형식이 맞지 않으므로 false를 반환했다!
정규식 표현을 포함한 데이터를 검색하고 싶을 때 - quote()
- public static String quote(@NotNull String s)
String data = "[123";
str.matches("[123");
만약 [123이라는 문자열에서 패턴이 [123인 것을 찾고 싶을 때 저렇게 적는다면 오류가 날 것이다.. 왜냐하면 [ ] <- 대괄호는 정규표현식을 표현하는 기호이기 때문이다. 이럴때 quote() 메소드를 사용한다.!
String data = "[123";
data.qoute("[123"); // "\Q[123\E"과 동일
이렇게 사용하면 오류가 발생하지 않고 사용할 수 있다.
'Back-end' 카테고리의 다른 글
[Spring Data JPA] JPA(Java Persistence API)란? (0) | 2021.11.15 |
---|---|
[Java] JVM(Java Virtual Machine)에 대해 (0) | 2021.11.14 |
[Java] Arrays 클래스에 대해, Arrays 클래스 Method 정리 (0) | 2021.11.09 |
[Java] 자바에서의 print, printf, println 차이점 (0) | 2021.11.08 |
[Java] 자바 스캐너(Scanner)에 대해 (0) | 2021.11.08 |