posted by changhozz 2012. 7. 24. 16:10

정규식 (Regular Expression) - Pattern. Match

Pattern은 정규식을 정의하는데 사용되고 Matcher는 정규식(패턴)을 데이터와 비교하는
역할을 한다.

Pattern p = Pattern.compile("c[a-z]*");
정규식을 매개변수로 Pattern 클래스의 static메서드인 Pattern compile(String regex)을
호출하여 Pattern인스턴스를 얻는다.

Matcher m = p.matcher(data[i]);
정규식으로 비교할 대상을 매개변수로 Pattern 클래스의 Matcher matcher(CharSequence input)를
호출해서 Matcher인스턴스를 얻는다.

<charSequence는 인터페이스로, 이를 구현한 클래스로는 CharBuffer, String, StringBuffer가 있다.>


if(m.matches())
Matcher인스턴스에 boolean matches()를 호출해서 정규식에 부합하는지 확인한다.

 

 

 

 

 

[] : 문자 클래스를 지정할 때 사용한다. 문자의 집합이나 범위를 나타내면 두 문자 사이는 '-' 기호로 범위를 나타낸다. []내에서 ^가 선행하여 나타나면 not을 나타낸다.

정규식 패턴 

설 명  

결 과 

c[a-z]* 

c로 시작하는 (소문자)영단어 

c,ca, co, car, combat, count

c[a-z] 

c로시작하는(소문자) 두자리 영단어 

ca,co

 c[a-zA-Z]

c로 시작하는 두자리 영단어(대소문자 구분없이.

 cA,ca,co

 c[a-zA-Z0-9]

c로 시작하고 숫자와 영어로 조합된 두 글자 

cA,ca,co,c0 

.* 

모든 문자열 

bat,baby,bonus,c,ca, 등 

c. 

c로 시작하는 두 자리 

cA,ca,co,c.,c0,c# 

c.* 

c로 시작하는 모든 문자열(기호포함)

cA,ca,c#,car,count

c\.

c.와 일치하는 문자열 '.'은 패턴작성에 사용되는 문자이므로 escape문자인 '\'를 사용해야 한다

c.,
 c[0-9]  c와 숫자로 구성된 두자리 문자열

c0,

 c.*t

c로 시작하고 t로 끝나는 모든 문자열

combat, count

 [b|c].*
 [b|c].*
 [b|c].*

 b또는 c로 시작하는 문자열

bat,baby,bonus,c,cA 등 

 [^b|c].*
[^b|c].*
[^b|c].*

b또는 c로 시작하지 않는 문자열 

date,disc, 

.*a.* 

a를 포함하는 모든 문자열
* : 0 또는 그 이상의 문자 

 bat,baby,ca,car,combat,date

.*a.+ 

a를 포함하는 모든 문자열.
+: 1 또는 그 이 상의 문자 +는 *과는 달리 반드시 하나 이상의 문자가 있어야 하므로 a로 끝나는 단어는 포함되지 않았다. 

bat,baby,car,combat,date 

[b|c].{2} 

b 또는 c로 시작하는 세 자리 문자열. (b또는 c 다음에 두 자리이므로 모두 세 자리) 

bat,car 

 

find()는 iterator와 같은 기능을 함.

주어진 소스 내에서 패턴과 일치하는 부분을 찾아내면 true를 반환하고 찾지 못하면 false를 반환한다.
find()를 호출해서 패턴과 일치하는 부분을 찾아낸 다음, 다시 find()를 호출하면 이전에 발견한 패턴과
일치하는 부분의 다음부터 다시 패턴매칭을 시작한다.

'정규식' 카테고리의 다른 글

정규식 정리2  (0) 2012.07.25
정규식  (0) 2012.07.16