2017-06-02 13 views
0

多くのHTMLドキュメントをXML準拠(Javaメソッドを使用)に変換しようとしていますが、多くの<br>タグがあります。 (2)属性を含む。何らかの理由で私が使用している正規表現は、属性を含むタグに対処しません。ここでは、コードは次のようになります。<br>、<BR>、<br +attribute>タグ<br/>

htmlString = htmlString.replaceAll("(?i)<br *>", "<br/>"); 

このコードは、文書内のすべての<br>タグに正常に動作します。それらを<br/>に置き換えます。ただし、タグの場合は

<BR style="PAGE-BREAK-BEFORE: always" clear=all> 

のようなタグはありません。私はすべてのbrタグを<br/>にすることを、変換前のタグの属性に関係なくしたいと思います。

これを達成するには、正規表現に何を追加する必要がありますか?

答えて

1

この正規表現は、あなたがやりたいことになります。ここでは<(BR|br)[^>]*>

は実施例である:HTMLは、正規ではないので、HTMLを解析する正規表現を使用してRegex101

1

おそらく<br\b[^>]*><br

    • スタートは(あなたが<brown>タグと一致しません、例えば
    • が含まれ<br後のワードブレークを持っているすべてのタグをマッチさせたいです0を含む任意の数の>を含む。
    • 終了>
  • 1

    あなたは*の代わりに.*を使用する必要があります。

    htmlString.replaceAll("(?i)<br .*>", "<br/>") 
    //-----------------------------^^ 
    

    理由:

    *マッチ直前の文字または部分式と0回以上。あなたのケースのための

    .*一致するように任意の文字がゼロまたは多数回

    を:

    String htmlString = "<BR style=\"PAGE-BREAK-BEFORE: always\" clear=all>"; 
    System.out.println(htmlString.replaceAll("(?i)<br .*>", "<br/>")); 
    

    出力

    <br/> 
    
    +0

    '。*'はお勧めできません。そのパターンは、 '
    Lorem ipsum dolor sit amet'でどうなるでしょうか? – VGR

    0

    は良いアイデアではありません。 NekoHTMLのような適切な解析ライブラリを使用する必要があります。

    NekoHTMLは、HTML文書を解析し、標準のXMLインタフェースを使用して 情報にアクセスする アプリケーションプログラマを有効に単純なHTMLスキャナとタグバランサです。パーサーは、HTML ファイルをスキャンして、ヒューマン(およびコンピュータ)の 人がHTML文書を書く際によくある間違いを「修正」することができます。 NekoHTMLは、不足している親の 要素を追加します。オプションの終了タグで要素を自動的に閉じます。 は、不一致のインライン要素タグを処理できます。

    関連する問題