0

Rubyで正規表現を使用して、<div>タグの開始と終了を一致させる方法を教えてもらえますか?</div>

たとえば、私が持っているとしましょう:

<div>
<p>test content</p>
</div>

これまでのところ私はこれを持っています:

< div [^>]* > [^<]*<\/div>

しかし、それは機能していないようです。

4

3 に答える 3

2

ノコギリは素晴らしいですが、私見では、使用できない状況があります。

単なるケースでは、これを使用できます:

puts str.scan(/<div>(.*)<\/div>/im).flatten.first

<p>test content</p>
于 2012-11-15T22:55:04.947 に答える
1

<div>すべてが 1 行にある場合に一致させるには、次を使用します。

/<div[^>]*>/

ただし、タグ内に改行があるマークアップではそれが壊れます。<と の間に空白がある場合も壊れdivます。

最終的に、タグを記述する方法について追加のチェックをすべて追加した後、より良い方法を検討する必要があります。それは、Nokogiri などのパーサーを使用することです。より簡単に。

たとえば、HTML を分解しようとしている場合:

<div>
<p>test content</p>
</div>

本当に「テスト コンテンツ」を取得したいことを推測するのは非常に簡単です。HTML が次のように変更された場合:

<div><p>test content</p></div>

またはさらに悪い:

<div
><p>
test
content
</div>

ブラウザは気にしませんし、優れたパーサーも気にしませんが、正規表現は混乱し、やり直しが必要になります。

require 'nokogiri'
require 'pp'

doc = Nokogiri.HTML(<<EOT)
    <div
    ><p>
    test
    content
    </div>
EOT
pp doc.at('p').text.strip.gsub(/\s+/, ' ')
# => "test content"

そのため、パーサーをお勧めします。

于 2012-11-15T22:21:46.687 に答える
0

PinnyM が指摘したように、 Nokogiriなどの HTML パーサーは、おそらく a を使用するよりも優れたオプションです。Regex

これは、HTML/XML ドキュメントを検索する方法を説明するNokogiriページのチュートリアルです。

このスタックオーバーフローの質問は、CSS セレクターを使用して達成したいことと同様のことを示しています。おそらく、そのようなものがあなたのために働くでしょう。

于 2012-11-15T22:21:35.790 に答える