정규표현식 regular expression
일반적인 작성단계
1) 주어진 정규표현식을 구현하는 Pattern 객체 생성
2) 패턴 매칭 수행객체 Matcher 생성
3) Matcher 객체로부터 패턴매칭을 수행하여 검색, 치환등의 동작
정규표현식을 사용하는 String 메소드
정규표현식 연습 사이트 추천
"^" : 문자열 시작
"$" : 문자열 종료
"." : 임의의 문자 [단 ‘'는 넣을 수 없습니다.]
"*" : 앞 문자가 0개 이상의 개수가 존재할 수 있습니다.
"+" : 앞 문자가 1개 이상의 개수가 존재할 수 있습니다.
"?" : 앞 문자가 없거나 하나 있을 수 있습니다.
"[]" : 문자의 집합이나 범위를 표현합니다. -기호를 통해 범위를 나타낼 수 있습니다. ^가 존재하면 not을 나타냅니다.
"{}" : 횟수 또는 범위를 나타냅니다.
"()" : 괄호안의 문자를 하나의 문자로 인식합니다.
"|" : 패턴을 OR 연산을 수행할 때 사용합니다.
"\s" : 공백 문자
"\S" : 공백 문자가 아닌 나머지 문자
"\w" : 알파벳이나 문자
"\W" : 알파벳이나 숫자를 제외한 문자
"\d" : [0-9] 숫자
"\D" : 숫자를 제외한 모든 문자
"(?i)" : 대소문자를 구분하지 않습니다.
package com.lec.java.j19_11_정규표현식메소드;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp01Main {
public static void main(String[] args) {
System.out.println("정규표현식 regular expression");
String input; // 입력문자열
String regex; // 정규표현식 문자열
Pattern pat;
Matcher matcher;
System.out.println();
System.out.println("■ 정규표현식 객체, 메소드 연습");
System.out.println("패턴] . ← 임의의 문자 하나");
// 1).주어진 정규표현식을 구현하는 Pattern 객체 생성
// Pattern.compile(정규표현식 문자열) 사용
regex = "My...."; // My로 시작하고 임의의 문자 4개
pat = Pattern.compile(regex);
input = "-My1234-";
System.out.println("input: " + input);
// 2) 패턴 매칭 수행객체 Matcher 생성
// Pattern 의 matcher() 사용
// Pattern을 사용해서 주어진 문자열에서 패턴 매칭할 객체 생성 --> Matcher객체 리턴
// (아직 패턴 매칭을 진행하진 않았다)
matcher = pat.matcher(input); // Matcher 생성
// 3) Matcher 객체로부터 패턴매칭을 수행하여 검색, 치환등의 동작
// find() '다음' 패턴매칭 검색 , 패턴매칭 발견하면 true 아니면 false 리턴
// group() 바로 직전에 패턴매칭된 문자열 String 리턴
// reset() 다시 처음부터 패턴매칭하도록 reset 함.
// replaceFirst() : 첫번째 매칭을 치환
// replaceAll() : 모든 매칭을 치환
// matches() : 패턴매칭이 '문자열 전체영역' 이 패턴매칭 되는지 여부
// start() : 최근 매칭의 시작 index,
// end() : 최근 매칭의 끝 index (마지막 매칭된 문자 '다음' 인덱스값)
if(matcher.find()) {
System.out.println(matcher.group() + " {" + matcher.start() + "~" + matcher.end() + "}");
} else {
System.out.println("find() 실패");
}
// 위를 다시 실행하면?, 다음 패턴매칭을 시도한다 --> 결과는 실패!
// find() 를 계속 호출하면 위에서 매칭한 이후부터 매칭을 시도한다
if(matcher.find()) {
System.out.println(matcher.group() + " {" + matcher.start() + "~" + matcher.end() + "}");
} else {
System.out.println("find() 실패");
}
// reset() 다시 처음부터 패턴매칭하도록 reset 함.
matcher = matcher.reset();
// 다시 시도하면 매칭이 된다.
if(matcher.find()) {
System.out.println(matcher.group() + " {" + matcher.start() + "~" + matcher.end() + "}");
} else {
System.out.println("find() 실패");
}
// replaceFirst() : 첫번째 매칭 패턴을 치환하여 결과 리턴
System.out.println(matcher.replaceFirst("XXXX"));
// matches()
// 패턴매칭이 '문자열 전체영역' 이 패턴매칭 되는지 여부 (true/false)
System.out.println();
System.out.println("matches()");
matcher = pat.matcher("-My1234-");
if(matcher.matches()){
System.out.println("matches() 전체매칭 OK");
} else {
System.out.println("matches() 전체매칭 FAIL");
}
matcher = pat.matcher("My1234");
if(matcher.matches()){
System.out.println("matches() 전체매칭 OK");
} else {
System.out.println("matches() 전체매칭 FAIL");
}
System.out.println();
System.out.println("Pattern.matches(regex, input) 사용");
// 단순히 '문자열 전체영역' 이 패턴에 맞는지 여부 만 확인하려면 간단하게 Pattern.matches() 사용하자.
// Pattern.matches()는 내부적으로 정확히 아래와 같이 동작하게 된다.
// Pattern.compile(regex).matcher(input).matches()
if(Pattern.matches("My....", "Myabcd")){
System.out.println("Pattern.matches() 매칭 OK");
} else {
System.out.println("Pattern.matches() 매칭 FAIL");
}
System.out.println();
System.out.println("■ 여러개 패턴 검색");
// 과연 "My...." 으로 몇개가 매칭되나? : 예측해보자
// 기본적으로 대소문자를 구분하여 매칭한다
input = "-My98KK-myABCD--My1234567--MyZZ---My789";
System.out.println(input);
matcher = pat.matcher(input);
while(matcher.find()) {
System.out.println(matcher.group() + " {" + matcher.start() + "~" + matcher.end() + "}");
}
System.out.println();
System.out.println(matcher.replaceFirst("***"));
System.out.println(matcher.replaceAll("***"));
System.out.println();
System.out.println("find(fromIndex)"); // fromIndex부터 검색
matcher = matcher.reset();
int fromIndex = 16;
while(matcher.find(fromIndex)) {
System.out.println(matcher.group() + " {" + matcher.start() + "~" + matcher.end() + "}");
fromIndex = matcher.end();
}
System.out.println("\n프로그램 종료");
} // end main()
} // end class