정규식이란?
: 텍스트 데이터 중에서 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용하는 것
import java.util.regex.*;
public class test {
public static void main(String args[]) {
String[] data = {"bat","baby","bonus","cA","ca","co","c.",
"c0","car","combat","count","date","disc"};
Pattern p = Pattern.compile("c[a-z]*");
for(int i=0; i<data.length; i++) {
Matcher m = p.matcher(data[i]);
if(m.matches())
System.out.print(data[i]+",");
}
}
}
Pattern
: 정규식을 정의하는데 사용
Matcher
: 정규식(패턴)을 데이터와 비교하는 역할
1. 정규식을 매개변수로 Pattern클래스의 static메서드인 Pattern compile(String regex)을 호출하여 Pattern인스턴스를 얻는다.
Pattern p = Pattern.compile("c[a-z]*");
2. 정규식으로 비교할 대상을 매개변수로 Pattern클래스의 Matcher matcher(CharSequence input)를 호출해서 Matcher인스턴스를 얻는다.
Matcher m = p.matcher(data[i]);
3. Matcher인스턴스에 boolean matches()를 호출해서 정규식에 부합하는지 확인한다.
if(m.matches())
정규식 패턴 | 설명 |
c[a-z]* | c로 시작하는 영단어 |
c[a-z] | c로 시작하는 두 자리 영단어 |
c[a-zA-Z] | c로 시작하는 두 자리 영단어(대소문자 구분 X) |
.* | 모든 문자열 |
c. | c로 시작하는 두 자리 |
[b|c].* [bc].* [b-c].* |
b 또는 c로 시작하는 문자열 |
- 이 외 등등 여러 패턴이 있다. p.507
★ 정규식의 일부를 괄호로 나누어 묶어서 그룹화할 수 있다.
String pattern = "(0\\d{1,2})-(\\d{3,4})-(\\d{4})";
find()
: 주어진 소스 내에서 패턴과 일치하는 부분을 찾아내면 true를 반환
: find()를 호출해서 패턴과 일치하는 부분을 찾아낸 다음, 다시 호출하면 이전에 발견한 패턴과 일치하는 부분의 다음부터 다시 패턴매칭 시작
import java.util.regex.*;
class RegularEx4{
public static void main(String[] args) {
String source = "A broken hand works, but not a broken heart.";
String pattern = "broken";
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(source);
System.out.println("source:"+source);
int i=0;
while(m.find()) {
System.out.println(++i + "번째 매칭: "+ m.start() + "~" + m.end());
// broken을 drunken으로 치환하여 sb에 저장
m.appendReplacement(sb,"drunken");
}
m.appendTail(sb);
System.out.println("Replacement count : "+i);
System.out.println("result: "+sb.toString());
}
}
/* result
...
1번째 매칭:2~8
2번째 매칭:31~37
...
result: A druken hand works, but not a drunken heart.
'Language > java' 카테고리의 다른 글
[Java] 유용한 클래스 (java.util.StringTokenizer 클래스) (0) | 2022.07.15 |
---|---|
[Java] 유용한 클래스 (java.util.Scanner 클래스) (0) | 2022.07.15 |
[Java] 유용한 클래스(java.util.Random클래스) (0) | 2022.07.14 |
java.lang 패키지(java.util.Objects클래스) (0) | 2022.07.14 |
java.lang 패키지(래퍼 클래스) (0) | 2022.07.14 |
댓글