2011-12-04 11 views
-1

可能性の重複:
RegEx match open tags except XHTML self-contained tagsHOwはjavaで正規表現を使ってdivを解析しますか?

私は、Javaを使用してタグを解析中に問題を抱えています。

目標:

私の目標は、それがサブタグが含まれていても、その内容の全てを完全にdivタグを解析することで、

のようなHTMLから

<h2>some random text</h2> 
<div id="outerDiv"> 
    some text 
     <div> 
      some more text 
     </div> 
    last text 
</div> 
<div> some random div <b>bold</b></div> 
私が解析したい

<div id="outerDiv"> 
     some text 
      <div> 
       some more text 
      </div> 
     last text 
    </div> 

しかし、私の内部のすべての内容は終了タグまでですこの形式か他のランダムな形式(私は式を使って試してみます)になります。)、

Regexが特定のIDを持つdivを解析するのを手伝ってください内容は完璧です。ここで

は私の表現(括弧の多くがちょうどより安全側にするように:))である:ここでは

((<div.*(class=\"afs\")(.)*?>)((.)*?)(((<div(.)*?>)((.)*?)((</div>){1}))*?)((</div>){1})) 

は私のJavaコードです:

package rexp; 

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

public class Rexp { 

    public static void main(String[] args) { 

     CharSequence inputStr = "asdasd<div class=\"af\">sasa<div><div><div class=\"afs\">as</div>qwessa</div></div></div>asd"; 


     Pattern pattern = Pattern.compile("((<div.*(class=\"afs\")(.)*?>)((.)*?)(((<div(.)*?>)((.)*?)((</div>){1}))*?)((</div>){1}))"); 
     Matcher matcher = null; 
     matcher = pattern.matcher(inputStr); 

     if (matcher.find()) { 
      System.out.println("Matched "+matcher.group(1)); 
     } else { 
      System.out.println("Not Matched"); 
     } 
    } 
} 
+3

明白な答え〜http://stackoverflow.com/a/1732454/89391 – miku

+3

あなたは自分の好意を持ち、適切なパーサーを使用してみませんか?正規表現はHTMLの解析には適していません。 – thkala

+0

OPが唯一のタグを解析する必要がある場合は、ここでは正規表現は完全に受け入れ可能であり、状況によってはそれらを実行することができます。 – Bryan

答えて

4

私は正規表現が間違っているツールだと思いますこのため。私は、レクサー/パーサライブラリを使用するか、サードパーティのHTML解析ライブラリを使用することを検討します。クイックGoogleはそこにいくつかを示しています。

3

正規表現は、HTMLがregular languageではないため、HTML解析には適していません。 jsoupJTidyなど、適切なHTMLパーサライブラリを使用する方がよいでしょう。

他のJava HTMLパーサー参照については、this questionも参照してください。

+0

私はあなたの答えに同意するが、htmlパーサーは正規表現の周りに構築することができる。 http://stackoverflow.com/questions/4231382/regular-expression-pattern-not-matching-anywhere-in-string/4234491#4234491 – FailedDev

+0

@FailedDevできません。あなたは後方参照(あなたがリンクしている答えはそこにループを使っています)で行うことができるかもしれませんが、それはもはやポイントを非常にうまく証明する正規表現ではありません。HTML/XMLを解析するのは数学的に不可能です正規表現は正しく。 – Voo

+0

@Vooまあ、私は、逆参照サポートなしで古代の正規表現エンジンについて話していることに気づいていませんでした:) - 正規表現で不規則なものを解析できるようになります:) – FailedDev

関連する問題