본문 바로가기

Java

자바 정규 표현식

자바 정규 표현식(JAVA Ragular expression!)


자바의 정규표현식은 J2SE 1.4 부터 지원되지 시작했습니다. 관련된 주요 클래스들는 java.util.regex 팩키지에 있습니다.

 

Pattern 클래스

 

Pattern 객체는 Perl 문법과 비슷한 형태로 정의된 정규표현식을 나타냅니다. 문자열로 정의한 정규표현식은 사용되기 전에 반드시 Pattern 클래스의 인스턴스로 컴파일되어야 합니다. 컴파일된 패턴은 Matcher 객체를 만드는 데 사용되며, Matcher 객체는 임의의 입력 문자열이 패턴에 부합되는 지 여부를 판가름하는 기능을 담당하합니다. 또한 Pattern 객체들은 비상태유지 객체들이기 때문에 여러 개의 Matcher 객체들이 공유할 수 있습니다.

 

Matcher 클래스

 

Matcher 객체는 특정한 문자열이 주어진 패턴과 일치하는가를 알아보는데 이용됩니다. Matcher 클래스의 입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원 받을 수 있습니다. 기본적으로 제공되는 CharSequence 객체들은 CharBuffer, String, StringBuffer 클래스가 있습니다.

Matcher 객체는 Pattern 객체의 matcher 메소드를 통해 얻어진다. Matcher 객체가 일단 만들어지면 주로 세 가지 목적으로 사용됩다.

  • 주어진 문자열 전체가 특정 패턴과 일치하는 가를 판단(matches).
  • 주어진 문자열이 특정 패턴으로 시작하는가를 판단(lookingAt).
  • 주어진 문자열에서 특정 패턴을 찾아낸다(find).

이들 메소드는 성공 시 true를 실패 시 false 를 반환합니다.

또한 특정 문자열을 찾아 새로운 문자열로 교체하는 기능도 제공됩니다. appendRepalcement 메소드는 일치하는 패턴이 나타날 때까지의 모든 문자들을 버퍼로 옮기고 찾아진 문자열 대신 교체 문자열로 채워 넣습니다. 또한 appendTail 메소드는 캐릭터 시퀀스의 현재 위치 이후의 문자들을 버퍼에 복사해 넣습니다. 다음 절에 나오는 예제 코드를 참고하도록 합시다.

 

CharSequence 인터페이스

 

CharSequence 인터페이스는 다양한 형태의 캐릭터 시퀀스에 대해 일관적인 접근 방법을 제공하기 위해 새로 생겨났으며, java.lang 패키지에 존재합니다. 기본적으로 String, StringBuffer, CharBuffer 클래스가 이를 구현하고 있으므로 적절한 것을 골라 사용하면 되며, 인터페이스가 간단하므로 필요하면 직접 이를 구현해 새로 하나 만들어도 됩니다.


정규표현식에 대한 자세한 문법

 

다음 파일을 참조하세요..

 

예제

 

  •  금지어 필터링 하기

    import! java.util.regex.Matcher;
    import! java.util.regex.Pattern;
    
    /**
     * 금지어 필터링하기
     * 
     * @author   Sehwan Noh <sehnoh@gmail.com>
     * @version  1.0 - 2006. 08. 22
     * @since    JDK 1.4
     */
    public class RegExTest06 {
        
        public static String filterText(String sText) {
            Pattern p = Pattern.compile("fuck|shit|개새끼", Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(sText);
    
            StringBuffer sb = new StringBuffer();
            while (m.find()) {
                //System.out.println(m.group());
                m.appendReplacement(sb, maskWord(m.group()));
            }
            m.appendTail(sb);
            
            //System.out.println(sb.toString());
            return sb.toString();
        }
        
        public static String maskWord(String word) {
            StringBuffer buff = new StringBuffer();
            char[] ch = word.toCharArray();
            for (int i = 0; i < ch.length; i++) {
                if (i < 1) {
                    buff.append(ch[i]);
                } else {
                    buff.append("*");
                }
            }
            return buff.toString();
        }
        
        public static void main(String[] args) {
            String sText = "Shit! Read the fucking manual.";        
            System.out.println(filterText(sText));
        }
    }

  • 이메일 주소 유효 검사

     
    import! java.util.regex.Matcher;
    import! java.util.regex.Pattern;
    
    /**
     * 이메일주소 유효검사
     * 
     * @author   Sehwan Noh <sehnoh@gmail.com>
     * @version  1.0 - 2006. 08. 22
     * @since    JDK 1.4
     */
    public class RegExTest03 {
        
        public static boolean isValidEmail(String email) {
            Pattern p = Pattern.compile("^(?:\\w+\\.?)*\\w+@(?:\\w+\\.)+\\w+$");
            Matcher m = p.matcher(email);
            return m.matches();
        }
    
        public static void main(String[] args) {
            
            String[] emails = { "test@abc.com", "a@.com", "abc@mydomain" };
            
            for (int i = 0; i < emails.length; i ++) {
                if (isValidEmail(emails[i])) {
                    System.out.println(emails[i]);
                }
            }
        }
    }
 
 
펌::http://blog.daum.net/dancingkingofking/7156169

'Java' 카테고리의 다른 글

파일업로드 실습  (0) 2009.11.28
iBatis 에서 테이블 생성  (0) 2009.11.17
iBatis에서 테이블 생성하기 - 당근 퍼왔죠!!  (0) 2009.11.17
자바의 Exception  (0) 2009.11.06
Iterator Test  (0) 2009.10.27