Rubyで正規表現を使用して、<div>
タグの開始と終了を一致させる方法を教えてもらえますか?</div>
たとえば、私が持っているとしましょう:
<div>
<p>test content</p>
</div>
これまでのところ私はこれを持っています:
< div [^>]* > [^<]*<\/div>
しかし、それは機能していないようです。
ノコギリは素晴らしいですが、私見では、使用できない状況があります。
単なるケースでは、これを使用できます:
puts str.scan(/<div>(.*)<\/div>/im).flatten.first
<p>test content</p>
<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"
そのため、パーサーをお勧めします。
PinnyM が指摘したように、 Nokogiriなどの HTML パーサーは、おそらく a を使用するよりも優れたオプションです。Regex
これは、HTML/XML ドキュメントを検索する方法を説明するNokogiriページのチュートリアルです。
このスタックオーバーフローの質問は、CSS セレクターを使用して達成したいことと同様のことを示しています。おそらく、そのようなものがあなたのために働くでしょう。