1

HTML ドキュメント内のデータを検索しようとしています。1 つのタグ間のデータだけなので、本格的なパーサーは必要ありません。

しかし、「select」タグとその間のデータを検出したい。

return Pattern.compile(pattern, 
                       Pattern.CASE_INSENSITIVE | Pattern.MULTILINE |
                       Pattern.DOTALL);

/// End right angle bracket left off intentionally:
track_pattern_buf.append("<select");
track_pattern_buf.append("(.*?)");
track_pattern_buf.append("</select");

これはあなたが使用する「正規表現」ですか?

4

5 に答える 5

5

本当に正規表現を使いたい場合(これは最良の選択ではありません)、私は次を使用します:

"<select[^>]*>(.+?)</select\s*>"
于 2009-02-04T17:31:32.907 に答える
1

次のようなものを使用します。

"<select>([^<>]+)</select>"

'>' を省略した理由がわかりませんが、他のタグと一致させたくありません (ここでは、ドキュメントの断片ではなく、テキスト データを探していると仮定しています)。

そうは言っても、正規表現はtrees を処理する能力でよく知られていないため、DOM を取得し、XPath (または同様のもの) を使用してクエリを実行することを検討します。

于 2009-02-04T17:28:14.877 に答える
0

次のようなものを用意する方が安全だと思います。

"<\s*select\s*>(.*?)<\s*/select\s*>"

セキュリティを強化するには、他の選択オプションが表示される場合に備えて、最初の選択の後に \w* を追加する必要があります。

また、HTML が標準に準拠している場合、3 番目の \s* はおそらくスキップされる可能性があります。

于 2009-02-04T17:31:32.750 に答える
0

本格的なパーサーが必要だとは思わないことは理解しています。私たちは皆、ある時点で HTML 正規表現パーサーを作成し、「私の使用例は非常に単純なので、今回はきっと正規表現を使用できるはずだ!」と考えています。

しかし、それを行ったことのある人なら誰でも、最終的には、面倒な作業を多くの優れた既存のパーサーの 1 つにアウトソーシングするだけで、より速く、より簡単に、より簡単に、より安全になるという結論に達すると思います。私は持っていることを知っています。

jSoupをチェックしてみてください。シンプルで、高速で、機能します。それを使用しない正当な理由は本当にありません。

それでも確信が持てない場合は、正しいパターンは何かを尋ねなければならなかったという事実 -そして、3つの異なる答えが返された - どれもすべての仕事をしていない -という事実は、問題がはるかに複雑であることを示しているはずです.一見したよりも。

于 2012-08-07T19:48:45.867 に答える