- ベストアンサー
マッチに関する正規表現
- $hoge変数からselectedが付いているoptionのvalue値を抽出する正規表現を教えてください。
- 正規表現$hoge =~ /value="?([^"]+)"? selected/gを使用しましたが、うまくいきませんでした。
- 正規表現の書き方を教えていただけないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
左辺をリストにするとパターン内の()のパターンに一致した部分のリストが返ります。 $_ = $hoge; my @hoge = /value="(.+)" selected/g; for(@hoge){ print $_,"\n"; }
その他の回答 (3)
- moon_piyo
- ベストアンサー率60% (88/146)
$hogeの内容がサンプルのようなフォーマットでしたら ($hoge1,$hoge2) = $hoge =~ /value="([^"]+)" selected/g; でよいとおもいます。 もうすこし一般的に対応させるならこんな感じですかね $cunt = 0; while ($hoge =~ /<option\s+value\s*=\s*(?:"([^"]*?)"|(\S+))\s*selected\s*>/ig) { $cunt++; ${"hoge$cunt"} = defined $1 ? $1 : $2; }
お礼
moon_piyoさん ありがとうございました。 せっかく回答をいただきましたが、うまく代入されませんでした。。。
- Dpop
- ベストアンサー率51% (279/544)
#1 です。 > foreach $hoge (@home) { は、 foreach $hoge (@html) { の間違えです。申し訳ない。
お礼
Dpop 専門家さん ありがとうございました。 こんな方法があったんですね。 せっかく回答をいただきましたが、うまく代入されませんでした。。。
- Dpop
- ベストアンサー率51% (279/544)
全ての行をまとめて処理するのではなく、一行単位に処理すれば良いと思いますよ。 $hoge =~ m/^<option +value=\"(.+)\" +selected>/; $hoge1 = $1; で、$hoge1 にvalueの値が入ると思います。 後は、指定されているHTMLの文をループで引き渡せば良いと思います。 $html =<< "EOH"; <select name="a"> <option value="A" selected>■</option> <option value="B">★</option> <option value="C">▲</option> </select> <select name="b"> <option value="A">■</option> <option value="B">★</option> <option value="C" selected>▲</option> </select> EOH @html = split(m/\n/, $html); @hoge = (); foreach $hoge (@home) { if ($hoge =~ m/^<option +value=\"(.+)\" +selected>/) { push(@hoge, $1); } } foreach (@hoge) { print $_. "\n"; } こんな感じかな。。
お礼
steel_grayさん おかげさまで、解決しました。 また一つ勉強になりました。 大変ありがとうございました。