1

重複の可能性:
正規表現は、XHTML の自己完結型タグを除く開始タグに一致します

次のような HTML ファイルがあります。

<html>
  <head>
    <title>foobar</title>
  </head>
  <body>
    bla bla<br />
    {[CONTAINER]}
      Hello
    {[/CONTAINER]}
  </body>
</html>

残りの html ファイルからコンテナ内の「Hello」を取得するにはどうすればよいですか? 私は何年も前にPHPでこれを行ったことがありますが、defindeクラス関数を呼び出してコンテナの内容をパラメータとして与えるREGEX関数を覚えています。

誰かがJavaでこれを行う方法を教えてもらえますか?

4

3 に答える 3

4

{[CONTAINER]}との間のすべてに一致する正規表現を使用できます{[/CONTAINER]}。例:

// Non capturing open tag. Non-capturing mean it won't be included in result when we match it against some text.
String open = "(?<=\\{\\[CONTAINER\\]\\})"; 

// Content between open and close tag.
String inside = ".*?"; 

// Non capturing close tag.
String close = "(?=\\{\\[/CONTAINER\\]\\})";

// Final regex
String regex = open + inside + close;

String text = "<html>..."; // you string here

// Usage
Matcher matcher = Pattern.compile(regex, Pattern.DOTALL).matcher(text);
while (matcher.find()) {
    String content = matcher.group().trim();
    System.out.println(content);
}

しかし、注意が必要です。{[CONTAINER]}とに対してのみ機能するため{[/CONTAINTER]}です。このカスタム タグの属性はサポートされていません。

また、特定の方法で html タグを処理しないことにも注意する必要があります。したがって、タグの間に html タグがある場合、CONTENTそれらは含まれます。

于 2013-01-31T14:39:12.877 に答える
0

なぜJavaを使いたいのですか?JavaScript で DOM API を簡単に使用できます。

document.getElementById("id_container").firstChild.data; // beware of \n char

または効率の悪い方法で:

document.getElementById("id_container").innerHTML;

ただし、ファイルがサーバー上に構築されている場合は、同じ API を使用することもできます。

http://docs.oracle.com/javase/6/docs/api/org/w3c/dom/package-summary.html

于 2013-01-31T14:34:33.840 に答える