프로그래밍/java

자바 정규식

세틴 2008. 8. 27. 11:44
원글

import java.util.regex.*;         // Pattern과 Matcher가 속한 패키지
 
class RegularEx2
{
         public static void main(String[] args)
         {
                  String[] data = {"bat", "baby", "bonus", "c", "cA",
                                                      "ca", "co", "c.", "c0", "c#",
                                                      "car","combat","count", "date", "disc"
                                                      };                 
                  String[] pattern = {".*","c[a-z]*","c[a-z]", "c[a-zA-Z]", "c[a-zA-Z0-9]",
                                                               "c.","c.*","c\\.","c\\w","c\\d","c.*t",         "[b|c].*",
                                                               ".*a.*", ".*a.+", "[b|c].{2}"
                                                               };
 
                  for(int x=0; x < pattern.length; x++) {
                           Pattern p = Pattern.compile(pattern[x]);
                           System.out.print("Pattern : " + pattern[x] + "  결과: ");
                           for(int i=0; i < data.length; i++) {
                                    Matcher m = p.matcher(data[i]);
                                    if(m.matches())
                                             System.out.print(data[i] + ",");
                           }
                           System.out.println();
                  }
         } // public static void main(String[] args)
}
 
/*
Pattern : .*  결과: bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,date,disc,
Pattern : c[a-z]*  결과: c,ca,co,car,combat,count,
Pattern : c[a-z]  결과: ca,co,
Pattern : c[a-zA-Z]  결과: cA,ca,co,
Pattern : c[a-zA-Z0-9]  결과: cA,ca,co,c0,
Pattern : c.  결과: cA,ca,co,c.,c0,c#,
Pattern : c.*  결과: c,cA,ca,co,c.,c0,c#,car,combat,count,
Pattern : c\.  결과: c.,
Pattern : c\w  결과: cA,ca,co,c0,
Pattern : c\d  결과: c0,
Pattern : c.*t  결과: combat,count,
Pattern : [b|c].*  결과: bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,
Pattern : .*a.*  결과: bat,baby,ca,car,combat,date,
Pattern : .*a.+  결과: bat,baby,car,combat,date,
Pattern : [b|c].{2}  결과: bat,car,
*/
[참고]쌍따옴표(")내에서 escape문자(\)를 표현하려면 escape문자를 '\\'와 같이 두 번 사용해야한다.
 
자주 쓰일 만한 몇 가지 패턴들을 만들어서 테스트하였다. 그 결과를 정리해보면 다음과 같다.

참고 URL: http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

규식

설명

결과

c[a-z]*

c로 시작하는 영단어

c,ca,co,car,combat,count,

c[a-z]

c로 시작하는 두 자리 영단어

ca,co,

c[a-zA-Z]

c로 시작하는 두 자리 영단어

(a~z 또는 A~Z, 즉 대소문자 구분안함)

cA,ca,co,

c[a-zA-Z0-9]

c\w

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

cA,ca,co,c0,

.*

모든 문자열

bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,date,disc,

c.

c로 시작하는 두 자리

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

c.*

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

cA,ca,co,c.,c0,c#,car,combat,count,

c\.

c.와 일치하는 문자열

'.'은 정규식표현에 사용되는 문자이므로 escape문자인 '\'를 사용해야한다.

c.,

c\d

c[0-9]

c와 숫자로 구성된 두 자리 문자열

c0,

c.*t

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

combat,count,

[b|c].*

[bc].*

[b-c].*

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

bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,

[^b|c].*

[^bc].*

[^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,

출처 : Tong - gaury님의 program data(JAVA)통