正規表現で HTMLタグのパラメータを抜き出す
正規表現ってのは、とっても面倒だよね?
ところが使い始めるとめちゃめちゃ便利・・・それをわかっていても面倒(笑)
要するに特定パターンで文字列を抜き出したいって場面は結構限られていたりする。
HTMLタグがそのひとつだ。
覚えたての正規表現で書いてみる。
$subvalue=~/src[\s]*=[\s]*\"(.*?)\"/i;これは、img タグの src のパラメータを抜き出す。
src って文字列が来てるところで、
[\s]* 空白があってもなくてもオケで、
= イコールが来て、
[\s]* 空白があってもなくてもオケで、
\” ダブルクォートが来てるところで、
(.*?) なんでもありの文字列で ←これが抜き出す文字列の部分を表す。
\” ダブルクォートが来てるところ。
で、 $1を使えばいい。
無駄なものが多いね。
こうかな?
$subvalue=~/src\s*=\s*\"(.*?)\"/i;
まとめて書くと
$subvalue=~/src[\s]*=[\s]*\"(.*?)\"/i; $get_para=$1;もっとも <img を先に抜き出さないといけないけどね。
<img のパーツを抜き出すなら。
$stat=~/\<img[\s]*(.*?)[\s]*\>/i; $invl=$1;これで <img ????? > の ????? の部分を取り出せる。
よくあるのが、(.*) で抜き出すサンプル。
なのでこれを踏襲して
$subvalue=~/src[\s]*=[\s]*\"(.*?)\"/i;って、書くと下のような場合、
<img src="aaasdasda.jpg" width="1" height="1">抜出内容は、
aaasdasda.jpg" width="1" height="1になるので注意が必要だ。正規表現はマッチする部分をとことん追跡するってところがポイント。
なので、 (.*) ではなく (.*?) と書くのが正解。
ちなみに、Javascript でタグのパラメータを抜き出すならすごくかんたん
<div id="top"> <a href="url1">link1</a> <a href="url2">link2</a> </div>JavaScript
var article_url_dom = d.getElementById('top'); var href_tag = article_url_dom.getElementsByTagName('a'); var href1= href_tag[0].getAttribute("href"); var href2= href_tag[1].getAttribute("href");これで href1 に url1 、 href2 に url2 がぬきだせる。
スポンサーリンク