• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現による置換)

正規表現による置換でHTMLタグから文字列を抽出する方法は?

このQ&Aのポイント
  • 正規表現を使ってHTMLタグから文字列を抽出する方法について質問です。
  • 具体的には、変換元のHTMLタグ内の特定の文字列を取り出したいのですが、正しい置換対象や置換後のパターンがわからず、困っています。
  • 一度の置換で目的の文字列を抽出する方法や、処理ツールの不具合の可能性について教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

No.1です Yahoo pipesの正規表現での話のようですね。ちょっと勘違い。 試してはいませんが、普通の正規表現を使えるツールでしたら、*html">(.*)</a.*でも取り出せるはずですが。 バグの可能性にしても変なバグだし、文字コードが原因としても考えにくいようですね。 その部分は他のツールを使って回避するしかないような。

koi1234
質問者

お礼

>普通の正規表現を使えるツールでしたら、*html">(.*)</a.*でも取り出せるはず 気になったのはこの点なんです いかんせん正規表現ちゃんと把握できな & HTMLもちゃんとわかってないという状態なんで 文法的にそれであっているのか 間違っているのかが知りたかったのです YahooPipesという特殊環境下の話なので何か特徴があるのかなと思っています 単純な変換だけで反が得れば動くはずだ(一応私の考えで正しい)と判断させていただきました 回答ありがとうございました

その他の回答 (1)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

>本来 2回目は(.*)</a  の気がするのですが1回目の結果を見るとなぜか</a>の部分もなくなってしまっています  本来はそうなるはずです。一回目で 抽出したい文字列 <img alt="new" class="new" height="15" src="http://*****.jpg" width="32"/> というふうに</a>が抜けてしまうのでしょうか?処理系のバグにしてもちょっと考えにくような。 私の普段使っているエディタでは .*html">(.*)を\1に置換 (.*)</a.*を\1に置換 でちゃんと取り出せます。$1ではなく\1で取り出すものもありますので注意してください。 1回でやりたのなら .*html">(.*?)</a.* で可能なはずです。試してみてください。(.*)だともし</aが二回以上ある場合には一番後ろとマッチしますので、?を加えることで直後の</aにマッチするようにしています。 また、sedが使えるのなら (sed -e 's/.*html">//'|sed -e 's/<\/a>.*//')<text.txt で可能です。 RubyやPerlなどでも簡単にできます 正規表現は使うプログラムによって違いが少しあるので、何をつかっているのか書かれるよ良いと思います。

関連するQ&A