SSISO Community

시소당

자바 정규표현식 - 여러가지

자바의  정규표현식은  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  RegExTest01  {

        public  static  void  main(String[]  args)  {

                Pattern  p  =  Pattern.compile("a*b");
                Matcher  m  =  p.matcher("aaaaab");
                boolean  b  =  m.matches();
                
                if  (b)  {
                        System.out.println("match");
                }  else  {
                        System.out.println("not  match");
                }
        }
}

결과

match

문자열  치환하기

소스

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  RegExTest02  {

        public  static  void  main(String[]  args)  {

                Pattern  p  =  Pattern.compile("cat");
                Matcher  m  =  p.matcher("one  cat  two  cats  in  the  yard");
                
                StringBuffer  sb  =  new  StringBuffer();
                while  (m.find())  {
                        m.appendReplacement(sb,  "dog");
                }
                m.appendTail(sb);
                System.out.println(sb.toString());
                
                //  or
                //String  str  =  m.replaceAll("dog");
                //System.out.println(str);
        }
}

결과

one  dog  two  dogs  in  the  yard

이메일주소  유효검사

소스

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]);
                        }
                }
        }
}

결과

test@abc.com

HTML  태그  제거

소스

import  java.util.regex.Matcher;
import  java.util.regex.Pattern;

/**
  *  HTML  태그  제거
  *  
  *  @author      Sehwan  Noh  <sehnoh@gmail.com>
  *  @version    1.0  -  2006.  08.  22
  *  @since        JDK  1.4
  */
public  class  RegExTest04  {

        public  static  String  stripHTML(String  htmlStr)  {
                Pattern  p  =  Pattern.compile("<(?:.|\\s)*?>");
                Matcher  m  =  p.matcher(htmlStr);
                return  m.replaceAll("");
        }
        
        public  static  void  main(String[]  args)  {
                String  htmlStr  =  "<html><body><h1>Java2go.net</h1>"
                        +  "  <p>Sehwan@Noh's  Personal  Workspace...</p></body></html>";
                System.out.println(stripHTML(htmlStr));                
        }
}

결과

Java2go.net  Sehwan@Noh's  Personal  Workspace...

HTML  링크  만들기

소스

import  java.util.regex.Matcher;
import  java.util.regex.Pattern;

/**
  *  HTML  링크  만들기
  *  
  *  @author      Sehwan  Noh  <sehnoh@gmail.com>
  *  @version    1.0  -  2006.  08.  22
  *  @since        JDK  1.4
  */
public  class  RegExTest05  {

        public  static  String  linkedText(String  sText)  {
                Pattern  p  =  Pattern.compile(
                                "(http|https|ftp)://[^\\s^\\.]+(\\.[^\\s^\\.]+)*");
                Matcher  m  =  p.matcher(sText);

                StringBuffer  sb  =  new  StringBuffer();
                while  (m.find())  {
                        m.appendReplacement(sb,  
                                        "<a  href='"  +  m.group()+"'>"  +  m.group()  +  "</a>");
                }
                m.appendTail(sb);

                return  sb.toString();
        }        
                
        public  static  void  main(String[]  args)  {                
                String  strText  =  
                                "My  homepage  URL  is  http://www.java2go.net/home/index.html.";
                System.out.println(linkedText(strText));
        }
}

결과

My  homepage  URL  is  
<a  href='http://www.java2go.net/index.html'>http://www.java2go.net/index.html</a>.

금지어  필터링하기

소스

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));
        }
}

결과

S***!  Read  the  f***ing  manual.  개**야.

1185 view

4.0 stars