2012-06-28 5 views
0

큰 파일 (20MB)에 URL 목록이 있습니다. 키워드 세트가 있습니다. 키워드 집합이 URL과 일치하면 URL을 추출하고 싶습니다.URL의 정규 표현식 키워드 일치

예 : 키워드 = "접촉" URL : HTTP :

//www.365media.com/offices-and-contact.html가 나는 URL을 내 목록으로 키워드와 일치하는 정규 표현식을해야합니다. .

친절하고 ..................................의 긴급 도와주세요

내 Java 코드 :

public class FileRead { 

    public static void main(String[] ags) throws FileNotFoundException 
    { 
     Scanner in=new Scanner(new File("D:\\Log\\Links.txt")); 
     String input; 
     String[] reg=new String[]{".*About.*",".*Available.*",".*Author.*",".*Blog.*",".*Business.*", 
    ".*Career.*",".*category.*",".*City.*",".*Company.*",".*Contain.*",".*Contact.*",".*Download.*", 
    ".*Email.*"}; 
     while(in.hasNext()) 
     { 
      input=in.nextLine(); 
      //for(String s:reg) 
       patternFind(input,".*email.*"); 
     } 

    } 
    public static void patternFind(String input,String reg) 
    { 
     Pattern p=Pattern.compile(reg); 
      Matcher m=p.matcher(input); 
      while(m.find()) 
       System.out.println(m.group()); 
    } 
} 
+0

어떤 정보가 필요합니까? 일치 검색/일치 검색 또는 일치하는 키워드 만 검색 하시겠습니까? – Zeemee

답변

1

어떤 키워드의 존재는 현재 행에, 당신은 단순히 "

for (String s: reg) { 
    if (input.contains(s)) { 
    // do something 
    } 
} 

대신 patternFind (입력으로 사용할 수 있습니다. 이메일. ");

어쨌든, 정규 표현식에 해당하는 단어 중 하나가 될 것이다 맞게 :

.*(About|Available|Author|And|So|On...).* 

을 내가 하나가 빠른 확실하지 않다 String.contains()를 간단하는 패턴. 여러 번 적용 할 때이 경우와 같이 더 잘 수행 할 수있는 사전 컴파일

1

이 할 수없는 이유 :.

For all line (URLs) in the file check if some of your pattern works on the URL 
을3210

코드가 꽤 분명합니다.

0

저는 조금 일반적인 해결책을 제시 할 것입니다. 나는 당신이 당신의 코드에 아이디어를 적용 할 수 있어야한다고 생각한다.

당신이 파일에 노출 된 키워드 목록을 가지고 있고 당신이 String[]로를 읽거나 세웠 당신 예를 들어 String[] 키워드의 목록을 하드 코드 : 모든 키워드에 대한

String keywords[] = {"about", "available", "email"}; 

Pattern.quote()을 사용하여 리터럴 문자열로 인식되는지 확인하십시오. 그런 다음 막대 문자 |을 키워드로 연결하여 구분 기호 (OR)로 사용하고 모든 키워드를 괄호 ()으로 묶습니다. 최종 결과는 이와 같습니다. 또는 키워드를 직접보고 \Q\E 따옴표없이 정규식을 작성할 수 있습니다. 또한 키워드에 정규식이 포함되어 있지 않으면 Pattern.quote() 단계를 무시하십시오.

(\Qabout\E|\Qavailable\E|\Qemail\E) 

는 대소 문자를 구별 일치를 사용하려면 처음에이 URL의 나머지 부분을 일치하는지 확인하기 위해 .* 2 끝을 추가, 플러스 (?i).

(?i).*(\Qabout\E|\Qavailable\E|\Qemail\E).* 

그럼 당신은 Pattern를 컴파일하고 URL 키워드가 있는지 여부를 확인하기 위해 입력의 각 라인에 matcher(inputString).matches()를 호출 할 수 있습니다.

키워드가 "com", "net", "www"와 같이 URL에서 너무 일반적이어서 더 정밀하게 검색하려면 더 미세하게 조정해야합니다.