검색엔진

Hagi 2009. 11. 11. 15:28

- 개행(newline)이나 탭(tab)문자는 백슬래쉬(\)로 시작하는 이스케이프 처리를 필요로 한다.

ex) \t  ex) \n

- 정규식 문법에서 일반 문자열을 리터럴(literal)이라고 부른다.  ex) hagi

- 문자 집합은 [] 괄호를 넣어서 명세한다. ex) [hagi] => h 또는 a 또는 g 또는 i 중 어떤 것과도 매칭됨

   만일 알파벳 모든 것을 포함하고 싶으면 소문자의 경우[a-z] , 대문자 소문자  숫자 가리지 않을 경우 [a-zA-Z0-9]

- 문자 집합에 ^를 넣으면 그 글자를 제외한 것이 찾아진다. ex) [^hark] => h 또는 a 또는 r 또는 k를 제외한 나머지


- 몇개인가를 표시할 때

   + => 1번 이상의 매칭

   * => 0번 이상의 매칭

   ? => 0번 또는 1번의 매칭


ex) x+ => x 또는 xx 또는 xxx  등등 다 매칭 됨

참고) Art Of Java/제6장 자바로 작성한 웹 크롤링/ p249


=============================================================================================================================

package org.hagi.ironwill.test.regex


import java.util.ArrayList;
import java.util.regex.Pattern;


public class GetSimpleUrl {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<String> list = new ArrayList<String>();
        list.add("http://www.daum.net/hagi/irionwo/a.html");
        list.add("http://daum.net/hagi/irionwo/a.html");
        list.add("http://hagi.daum.net/hagi/irionwo/a.html");
        list.add("http://blog.daum.net/hagi/irionwo/a.html");
        list.add("http://daum.net/hagi/irionwo/a.html");
        list.add("http://io123.naver.net/hagi/irionwo/a.html");
        list.add("http://www.tisotry.net/hagi/irionwo/a.html");
        list.add("http://www.kkk.net/hagi/irionwo/a.html");
        list.add("http://www.abc.co.kr/hagi/irionwo/a.html");
        list.add("http://www.sdfjkl.com/hagi/irionwo/a.html");
       
        for(String temp:list){ //ArrayList에 10개의 url을 넣는다.
            String url = removePrefix(temp);                 System.out.println("url = >"+url);
            String HostName = getHostName(url);            System.out.println("호스트명:"+HostName);
        }
    }
    //           http:// 뒤에 있는 0개 이상의 문자나 숫자(예를 들어 blog나 www)를 잘라내고  이것 뒤에는 1개이상의 .이 있어야 한다.

   //           
    public static String removePrefix(String url){  // www 나 blog 등 호스트 명 앞에 있는 것을 잘라낸다.  [[[[정규 표현식]]]] 이용 !!!
        Pattern pattern = Pattern.compile("http://*[a-zA-Z0-9]+.", Pattern.CASE_INSENSITIVE);
        url = pattern.matcher(url).replaceAll("http://");
        return url;
    }
    public static String getHostName(String url){  // 호스트 명만 나타내기 위하여 http://를 잘라 내었다. String 클래스의 메서드를 이용
        String tempStr = null;
        int beginIndex = url.indexOf("http://")+7;
        int endIndex = url.indexOf("/",beginIndex) ;
        if(endIndex<0){
            tempStr = url.substring(beginIndex);
        }else{
            tempStr = url.substring(beginIndex,endIndex);
        }
        return tempStr;
    }
}