SSISO Community

시소당

Java SE의 정규 표현식

Java  SE의  정규  표현식(expression  or  regex)의  지원은  1.4  이후  자바  플랫품의  일부가  되어  왔다.  java.util.regex  package의  클래스는  펄  언어가  제공하는  것과  유사하게  패턴  매칭을  지원하지만  자바  언어구문  및  클래스를  사용한다.1.4  에서는  Pattern,  Matcher,  PatternSyntaxException  3가지  클래스가  있고,  1.5에서는  MatchResult  인터페이스가  추가되었다.

정  규  표현식은  간단하게  Pattern과  Matcher를  사용한다.  Pattern  클래스를  이용하여  정규  표현식을  정의하고,  Matcher  클래스를  사용하여  입력  소스에  대한  패턴  매칭을  검사한다.  표현식에서  패턴에  구문  오류가  있으면  PatternSyntaxException이  발생된다.

--  정규  표현식  사용  예
Pattern  pattern  =  Pattern.compile(<regular  expression>);
Matcher  matcher  =  pattern.matcher(<input  source>);

while(matcher.find())  {
        System.out.printf"Found:  \"%s\"  from  %d  to  %d.%n",  matcher.group(),  matcher.start(),  matcher.end());
}

--  정규  표현식  사용  예제  프로그램
다음  코드는  기본적인  정규  표현식  프로그램으로  사용자가  정규  표현식과  비교  문자열을  입력하도록  하며,  입력  된  값을  이용하여  패턴  매칭되는  것을  출력한다.
import  java.util.regex.*;

public  class  Regex  {

        public  static  void  main(String  args[])  {
                Console  console  =  System.console();

                //  Get  regular  expression
                String  regex  =  console.readLine("%nEnter  expression:  ");
                Pattern  pattern  =  Pattern.compile(regex);

                //  Get  source
                String  source  =  console.readLine("Enter  input  source:  ");
                Matcher  matcher  =  pattern.matcher(source);

                //  Show  matches
              while  (matcher.find())  {
                      System.out.printf("Found:  \"%s\"  from  %d  to  %d.%n",  matcher.group(),  matcher.start(),  matcher.end());
                }
        }
}

그러면  정규  표현식의  모양이  어떻게  되는지를  알아보자.
-  Pattern  클래스는  보다  세부적인  사항을  제공하지만  기본적으로  정규  표현식은  다른  문자  시퀀스와  일치시킬  문자  시퀀스이다.
    예를  들어,  "Hello,  World"  문자열에서  두  개의  L자("ll")  문자열  리터럴  패턴을  찾을  수  있다.  앞의  프로그램은  시작  위치  2와  끝  위치  4에서  "ll"  패턴을  찾을  것이다.
-  정규  표현식  패턴은  특수  메타  문자를  포함할  수  있다.  메타  문자는  정규  표현식에서  강력한  매칭  기능을  제공한다.  정규  표현식에서는  "([{\^-$|]})?*+."의  15문자를  메타  문자로  사용할  수  있다.

*  특수  메타  문자  *
대괄호([  ])  :  대활호  안의  문자  중  하나가  텍스트에서  발견되는  경우  매칭이  성공하는  일련의  문자를  지정할  수  있다.  단일  문자를  매칭하는  데만  사용된다.
개발  문자의  매칭  이외에  대괄호  문자([  및  ])를  사용하여  [j-z]로  지정된  j-z의  문자처럼  일정  범위의  문자를  매칭할  수  있다.  이러한  문자  범위는  "foo[j-z]"처럼  문자열  리터럴과  결합할  수도  있다.
[a-zA-Z]처럼  여러  범위를  결합하여  a에서  z  사이의  소문자와  대문자를  나타낼  수도  있다.
    "co[cl]a"  패턴은  coca  및  cola라는  단어와  매칭된다.  cocla는  매칭되지  않는다.
    "foo[j-z]"  패턴은  fool  단어와  매칭된다.  food는  매칭되지  않는다.
^  :  문자열  리터럴  또는  문자  범위의  제외를  지정한다.
    "foo[^j-z]"  패턴은  foo로  시작하고  j에서  z  사이의  문자로  끝나지  않는  단어를  찾는다.  food라는  문자열이  매칭에  성공하며,  fool은  매칭되지  않는다.
마침표(.)  :  임의  문자를  나타내는  데  지정된다.
    ".oney"  패턴은  money  및  honey와  매칭되며  oney로  끝나는  5자의  어느  단어와도  매칭된다.
역슬래쉬(\)  :  다른  문자와  함께  사용되어  전체  문자  집합이  지정된다.  숫자  집합을  나타내기  위해  [0-9]를  사용할  수  있지만  \d를  사용할  수도  있다.  숫자가  아닌  문자  집합을  나타내기  위해  [^0-9]를  사용할  수도  있다.  또는  \D의  미리  정의된  문자  클래스  문자열을  사용할  수  있다.
    \s  (whitespace),  \S  (non-whitespace),  \w  (word  character  [a-zA-Z0-9]),  \W  (non-word  character),  \p{Punct}  (punctuation),  \p{Lower}  (lowercase  [a-z]),  \p{Upper}  (uppercase  [A-Z])
    자바  소스에서는  String  regexString  =  "\\s";  처럼  이스케이프해야  한다.
수량자({횟수})  :  동일  패턴의  반복  매칭을  지정한다.  "[a-z][a-z][a-z]"  패턴을  사용할  수도  있지만  그럴  ":[a-z]{3}"으로  나타낼  수  있다.  수량자를  사용할  때  범위도  지정할  수  있다.  {3}은  정확히  3번을  의미하지만  {3,}은  적어도  3번을  의미한다.  수량자  {3,  5}는  3번에서  5번까지의  패턴
물음표(?),  0,  더하기(+)  :  수량자와  함께  사용되면서  회수를  특정  숫자가  아닌  0번  또는  한  번(?),  0번  이상(0),  한  번  이상(+)을  나타낸다.
    [a-z]?  패턴은  a-z의  문자와  0번  또는  한  번  매칭된다.  [a-z]*  패턴은  a-z의  문자와  0번  이상  매칭된다.  [a-z]+  패턴은  a-z의  문자와  한  번  이상  매칭된다.

Java  SE  정규식에  대한  자세한  내용을  살펴보려면  자바  온라인  자습서의  정규  표현식  편을  참고하면  된다.

609 view

4.0 stars