0

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

rubular.com で正規表現をテストしたところ動作しましたが、コードを実行すると動作が異なります。

HTMLコードから段落全体を解析したい

これが私の正規表現です

description = ad_page.body.scan(/(?<=<span id="preview-local-desc">).+(?=<\/span>)/m)

HTMLソースの一部を以下に示します

<span id="preview-local-desc"> I want to pick up everything typed here.
Paragraphs, everything.
</span>

一致は必要なところから始まりますが、その後はドキュメントの最後まで一致し続けます。

4

2 に答える 2

4

HTML を regex で解析すべきではないという事実は別として、貪欲でないマッチングが必要です。

/(?<=<span id="preview-local-desc">).+?(?=<\/span>)/m
于 2012-11-17T17:15:24.490 に答える
0

ファイルのフォーマットを所有または管理している場合、正規表現を使用した XML や HTML の解析は、些細な作業であればほとんど問題ありません。そうしないと、ファイルを変更するだけで正規表現が壊れる可能性があります。

パーサーを使用すると、その問題を回避できます。私はNokogiriで恐ろしい XML を解析しましたが、認識さえしませんでした。1000 以上のフィードを処理する RSS アグリゲーターを作成した後、私はパーサーの使用に夢中になりました。

require 'nokogiri'

html = '<span id="preview-local-desc"> I want to pick up everything typed here.
Paragraphs, everything.
</span>'

doc = Nokogiri.HTML(html)
doc.at('span').text
# => " I want to pick up everything typed here.\n    Paragraphs, everything.\n    "

<span>必要なタグが複数ある場合:

doc.search('span').map(&:text)
# => [" I want to pick up everything typed here.\n    Paragraphs, everything.\n    "]

複数の<span>タグがあり、この 1 つだけが必要な場合:

doc.at('span#preview-local-desc').text
# => " I want to pick up everything typed here.\n    Paragraphs, everything.\n    "
于 2012-11-17T23:30:51.337 に答える