자바 정규표현식 Pattern, Matcher
자바에서 정규식을 사용하기 위해서는 Pattern, Matcher 클래스 객체가 필요합니다. 문자열로 정의한 정규 표현식을 Pattern 객체로 만들기 위해 Pattern 클래스의 compile() 메소드를 사용합니다. 컴파일된 패턴은 Matcher 객체를 만드는 데 사용되며, Matcher객체는 임의의 입력 문자열이 패턴에 부합되는지 여부를 판가름하는 기능을 가지고 있습니다. Pattern 객체들은 비상태 유지 객체들이기 때문에 여러 개의 Matcher 객체들이 공유할 수 있습니다.
Pattern
Pattern 객체는 Perl 문법과 비슷한 형태로 정의된 정규표현식을 나타냅니다.
문자열로 정의한 정규표현식은 사용되기 전에 반드시 Pattern 클래스의 인스턴스로 컴파일되어야 합니다. 컴파일된 패턴은 Matcher 객체를 만드는 데 사용되며, Matcher 객체는 임의의 입력 문자열이 패턴에 부합되는 지 여부를 판가름하는 기능을 담당합니다. 또한 Pattern 객체들은 비상태유지 객체들이기 때문에 여러 개의 Matcher 객체들이 공유할 수 있습니다.
Pattern클래스 주요 메서드
Name | Description |
static Pattern compile(String regex) |
주어진 정규표현식으로부터 패턴을 만들어낸다(이를 ‘컴파일 한다’고 표현한다). |
static Matcher matcher (CharSequence input) |
입력 캐릭터 시퀀스에서 패턴을 찾는 Matcher 객체를 만든다. |
String pattern() |
컴파일된 정규표현식을 String 형태로 반환한다. |
String split(CharSequence input) |
주어진 입력 캐릭터 시퀀스를 패턴에 따라 분리한다. |
static boolean matches (String regex, CharSequence input) | 주어진 정규식으로 컴파일하고, 주어진 문자열이 규칙에 부합되는지 여부를 확인한다. |
Pattern에서 사용되는 상수 값
Name |
Description |
Pattern.CASE_INSENSITIVE |
대소문자를 구분하지 않는다. |
Pattern.COMMENTS |
패턴에 코멘트(comment)와 공백 문자를 허용한다. |
Pattern.DOTALL |
Dotall 모드를 사용한다. |
Pattern.MULTILINE |
멀티라인 모드를 사용한다. |
Pattern.UNIX_LINES |
유닉스 라인 모드를 사용한다. |
Matcher
Matcher 객체는 특정한 문자열이 주어진 패턴과 일치하는가를 알아보는데 이용됩니다. Matcher 클래스의 입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원 받을 수 있습니다. 기본적으로 제공되는 CharSequence 객체들은 CharBuffer, String, StringBuffer 클래스가 있습니다. Matcher 객체는 Pattern 객체의 matcher 메소드를 통해 받아올 수 있습니다.
Matcher 객체가 일단 만들어지면 주로 세 가지 목적으로 사용됩니다.
- 1) 주어진 문자열 전체가 특정 패턴과 일치하는 가를 판단(matches).
- 2) 주어진 문자열이 특정 패턴으로 시작하는가를 판단(lookingAt).
- 3) 주어진 문자열에서 특정 패턴을 찾아낸다(find).
- 5) 특정 문자열을 찾아 새로운 문자열로 교체하는 기능도 제공된다.
Matcher클래스 주요 메서드
Name |
Description |
boolean matches() |
주어진 문자열 전체가 특정 패턴과 일치하는가를 판단한다. |
boolean lookingAt() |
주어진 문자열이 특정 패턴으로 시작하는가를 판단한다. |
boolean find() |
주어진 문자열에서 특정 패턴을 찾아낸다. |
boolean find(int start) |
Start 위치 이후부터 매칭 검사를 수행한다. |
int start() |
매칭되는 문자열 끝 다음 문자 위치를 반환한다. |
int start(int group) |
지정된 그룹이 매칭되는 시작 위치를 반환한다. |
int end |
매칭되는 문자열 끝 다음 문자 위치를 반환한다. |
int end(int group) |
지정된 그룹이 매칭되는 끝 다음 문자 위치를 반환한다. |
String group() |
매칭된 부분을 반환한다. |
String group(int group) | 매칭된 부분 중 group 번째 매칭 부분을 반환한다. |
String replaceAll(String replacement) | 패턴과 일치되는 부분을 replacement로 대체한다. |
String replaceFirst(String replacement) | 패턴과 일치되는 첫 번째 문자열을 replacement로 대체한다. |
Matcher appendReplacement | 일치되는 패턴이 나타날 때까지 모든 문자들을 버퍼(sb)로 옮기고, 패턴에 일치되는 문자열은 두 번째 파라미터인 replacement 문자열로 대체한다. |
StringBuffer appendTail(StringBuffer sb) | 캐릭터 시퀀스의 현재 위치 이후의 문자들을 버퍼(sb)에 복사해 넣는다. |
자바 정규표현식의 간단 설명
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { private static Pattern p = null; private static Matcher m = null; private static final String ONLY_NUM_PATTERN = "^[0-9]+$"; private static final String FILE_PATTERN = "^\\S+.(?i)(txt|pdf|hwp|xls)$"; public static boolean numCheck(String str) { p = Pattern.compile(ONLY_NUM_PATTERN); m = p.matcher(str); return m.find(); } public static boolean fileCheck(String str) { p = Pattern.compile(FILE_PATTERN); m = p.matcher(str); return m.find(); } public static void main(String[] args) { System.out.println(numCheck("123123123")); //true System.out.println(numCheck("1231--23123")); //false System.out.println(numCheck("a23123")); //false System.out.println(fileCheck("a23123")); //false System.out.println(fileCheck("ktko.txt")); //true System.out.println(fileCheck("ktko.pdf")); //true System.out.println(fileCheck("ktko.xls")); //true System.out.println(fileCheck("ktko.jpeg")); //false } }
정규표현식으로부터 패턴을 만듭니다.
p = Pattern.compile(ONLY_NUM_PATTERN);
만들어진 패턴에 정규표현식에 대입될 문자열을 입력하여 Matcher객체를 생성합니다.
m = p.matcher(str);
대입된 문자열에서 특정 패턴을 찾습니다.
m.find();
'Java 개발 이야기' 카테고리의 다른 글
자바 예외처리(Exception handling) (0) | 2017.09.21 |
---|---|
자바 객체의 직렬화(Serializable, serialVersionUID) (0) | 2017.09.19 |
자바 날짜와 시간 다루기 (0) | 2017.09.16 |
자바 SMTP와 Mail 발송하기(Google, Naver) (10) | 2017.09.08 |
자바 BASE64 인코딩 디코딩하기 (2) | 2017.09.08 |