2011-06-28 12 views
0

この特定の質問を確認したところ、何も見つかりませんでした。私はWebページからコンテンツを分析するJavaでプログラムを書いているので、すべてのリンクとタグ(hrefimgなど)を取り除くことができる正規表現が必要です。ウェブページに表示されます。どうもありがとう。Javaプログラムで正規表現でWebページの内容(タグ、リンクではない)のみを表示する方法

こんにちは、私はそれをより具体的にしたかった:

URLConnection connection = wordURL.openConnection("http://en.wikipedia.org/wiki/Bloom_filter"); 
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
String line; 
String word = "bloom filter"; 
String regexp2 = word; 
Pattern pattern2 = Pattern.compile(regexp2); 
String HTML_REGEX = "(<.+?>)+"; // as per your answer(Martijn Courteaux) 
while ((line = br.readLine()) != null) 
{ 
     String content; 
     if ((content = line.replaceAll(HTML_REGEX, "\n"))!= null) 
     { 
       Matcher matcher2 = pattern2.matcher(line); 
       if(matcher2.find()) 
       { 
        System.out.println(line); 
       } 
     } 
} 

しかし残念ながら、それはまだ</li>内部のいくつかのゴミと段落(<p>)タグとも<li>タグを出力します。私はそれが "ブルームフィルター"が存在する単語だけを表示するように制限したいと思います。再び感謝します。

答えて

1

私は本当にそれがhtmlで正規表現を使用することは良くないと知っています。しかし、彼は本当に役立つかもしれない本を希望する場合:

String HTML_REGEX = "<.+?>"; 
String yourHTML = "<html><body><h1>Lorem Ipsum</h1>" + 
        "<p>Lorem <i>Ipsum</i> dolorem sedet. Set nihil amat. " + 
        "<sub>I don't know the text</sub></p></body></html>" 

String content = yourHTML.replaceAll(HTML_REGEX, "\n"); 
System.out.println(content); 

プリント:あなたが見ることができるように

 



Lorem Impsum 

Lorem 
Ipsum 
dolorem sedet. Set nihil amat. 
I don't know the text 




が、それは動作しますが、それはあなたが望む間違いではありません。


あなたは、この正規表現を使用して改行の数を減らすことができます。

String HTML_REGEX = "(<.+?>)+"; 
String yourHTML = "<html><body><h1>Lorem Ipsum</h1>" + 
        "<p>Lorem <i>Ipsum</i> dolorem sedet. Set nihil amat. " + 
        "<sub>I don't know the text</sub></p></body></html>" 

String content = yourHTML.replaceAll(HTML_REGEX, "\n"); 
System.out.println(content); 

プリント:

 

Lorem Impsum 
Lorem 
Ipsum 
dolorem sedet. Set nihil amat. 
I don't know the text 


私はあなたのコードを試みたが、それが実際に動作しませんでした。いくつかの編集をした後、これは働いていた:

  • はあなたが見つけることを試みた

    1. あなたはcontentを印刷しますが、タグが含まれているもちろんlineませんでした...:あなたは間違っていた何だった

      URLConnection connection = new URL("http://en.wikipedia.org/wiki/Bloom_filter").openConnection(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      String line; 
      String word = "bloom filter".toLowerCase(); 
      String HTML_REGEX = "(<.+?>)+"; // as per your answer(Martijn Courteaux) 
      while ((line = br.readLine()) != null) { 
          String content; 
          if ((content = line.replaceAll(HTML_REGEX, "\n")) != null) { 
           if (content.toLowerCase().contains(word)) /* Changed: regex match -> contains() */ 
           { 
            System.out.println(content); /* CHANGED: line -> content */ 
           } 
          } 
      } 
      

      word "bloom filter"正規表現を使用します(大文字と小文字が区別されます)。したがって、文字列を小文字にしてString.contains(CharSequence target)を使用してください。これは、ターゲット文字列が文字列全体の一部であるかどうかを示します。私Thanks..let

    +0

    こんにちは、あなたの答えは確かに助けたが、私は私の新しい編集済みの質問ごとに、それを制限する(上記の)コードを変更助けることができる(笑)...リンクの –

    +0

    ありがとうございました。あなたのソリューションは完璧に機能しました! –

    +0

    歓迎しますが、JSoupのようなパーサを使うべきです。 –

    5

    HTMLは正規ではありませんので、正規表現ではできませんが、JSoupを使用できます。

    jsoupは、現実世界のHTMLを扱うためのJavaライブラリです。これは、DOM、CSS、およびjqueryのようなメソッドを使用して、データを抽出して操作するための非常に便利なAPIを提供します。あなたはone of the examplesに概説されている次のことを好きかもしれません特に

    ...

    String html = "<div><p>Lorem ipsum.</p>"; 
    Document doc = Jsoup.parseBodyFragment(html); 
    Element body = doc.body(); 
    
    +0

    は –

    関連する問題