기타/프로그래밍 분류

JAVA - 패턴 매칭(Pattern Matching)

zelkova 2013. 10. 13. 23:26

패턴매칭이란 텍스트에서 일련의 패턴을 찾는 것을 말한다.

예를 들어 "ABCABABABCCCAA"라는 문자열이 있을 때 여기서 "ABC"이라는 문자열을 찾는 것을 패턴 매칭이라고 한다. 


매칭 예제

import java.util.regex.Matcher;

import java.util.regex.Pattern;


class Test {

public static void main(String[] args){

Pattern p = Pattern.compile("BAB");

Matcher m = p.matcher("ABCABABABCCCAA");


boolean a = false;

while(a = m.find()){

System.out.println(m.start() + " " + m.group());

}

}

}


패턴 매칭 단계

1. pettern 인스턴스 생성 = Pattern p = Pattern.compile("BAB");

2. Matcher 인스턴스 생성 = Matcher m = p.matcher("ABCABABABCCCAA");

3. 패턴 비교 = while(a = m.find()


패턴 매칭의 주요 메소드

static Pattern

compile(String regex)

주어진 정규 표현을 패턴으로 컴파일한다.


String 

pattern()

컴파일된 패턴의 정규 표현을 반환한다.


java.util.regex.Matcher 클래스의 메소드

boolean

find()

패턴과 일치하는 일련의 텍스트를 계속 찾는다.


boolean

lookingAt()

대상 텍스트의 처음 위치부터 패턴과 일치하는 텍스트를 찾는다. 이때 대상 텍스트 전체가 패턴과 일치할 필요는 없다.


boolean matches()

대상 텍스트 전체와 패턴과의 일치 여부를 반환한다.


String

group()

대상 텍스트 전체에서 패턴과 일치된 텍스트를 반환한다.


int

start()

패턴을 찾기 위한 텍스트의 시작 위치를 반환한다.


메타 문자

\d    숫자

\s    공백문자

\w    단어(문자,숫자, _)

(...)    그룹화

[...]    안에 포함된 문자들


메타문자 예제

import java.util.regex.Matcher;

import java.util.regex.Pattern;


class Test {

public static void main(String[] args){

Pattern p = Pattern.compile("\\d"); 

Matcher m = p.matcher("1aA2b_B");


boolean a = false;

while(a = m.find()){

System.out.print("[" + m.start() +  "_" + m.group() +"]");

}

}

}



특수 문자

.    어떤 문자라도 한자가 올 수 있음

?    어떤 문자가 0번 또는 1번 나올 수 있음

*    어떤 문자가 0번 이상 나올 수 있음

+    어떤 문자가 1번 이상 나올 수 있음


특수 문자

import java.util.regex.Matcher;

import java.util.regex.Pattern;


class Test{

public static void main(String[] args){

Pattern p = Pattern.compile("..B"); 

Matcher m = p.matcher("1aA2b_B");


boolean b = false;


while(b = m.find(){

System.out.print("[" + m.start() +  "_" + m.group() +"]");

}

}

}



반응형

'기타 > 프로그래밍 분류' 카테고리의 다른 글

JAVA - 컬렉션_리스트(List)  (0) 2013.10.15
JAVA - 컬렉션_집합(set)  (0) 2013.10.15
XML  (0) 2011.11.26
Java  (0) 2011.11.26
Java - 26.Label,TextField,Button 컴포넌트  (0) 2011.07.17