- ベストアンサー
正しい正規表現を教えてください
お世話になります。 正規表現で次のように指定しているのですが、正確か自信がありませんので 正しい表記を教えてください。 1.全てのHTMLタグ <.*?> 2.「2012.1.1」または「2012.01.01」のような数字の羅列 (\d{4}).(\d{1,2}).(\d{1,2}) 3.「<img src="~」から始まる部分 <img src=" 4.「<div class="release">」を含む部分 <div class="release"> 5.HTMLタグと文字全て ^.*$ 全て色々なサイトで調べて表記したのですが、処理に時間がかかってて間違っている気がします。 yahoo!pipesのregexモジュールの部分で使用していて、デバッガーのTime takenに時間がかかっている場合、正しくない正規表現が原因らしいのです。 どうぞ宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>1.全てのHTMLタグ ><.*?> タグはつかめますがこれは無意味。 <hoge>fuga</hoge>がつかみたいのではないのですか? またタグではない文字列で使われている可能性もあります。 >2.「2012.1.1」または「2012.01.01」のような数字の羅列 >(\d{4}).(\d{1,2}).(\d{1,2}) (\d{4})\.(\d{1,2})\.(\d{1,2}) としましょう。「.」自体は別の意味をもっています >3.「<img src="~」から始まる部分 ><img src=" かならずimgの後ろに半角スペース1個、src、イコール、ダブルクォーテーション となるならそれでもいいですが、必ずしも元htmlがそうなっているとは 限りませんね またimgタグからsrcの内容を抜きたいならやり方を工夫する必要があると思います。 >4.「<div class="release">」を含む部分 ><div class="release"> 上記しましたが何を抜きたいかによります。 「<div class="release">」という文字が含まれているかだけが しりたいならpreg_match系の正規表現ではなく、完全一致の str_matchなどを使うよう勧められています。 >5.HTMLタグと文字全て >^.*$ 複数行にまたがる場合など考慮していますか? 単純に考えれば「.*」で十分かと (修飾子などで調整が可能)
補足
ありがとうございます。 >1.全てのHTMLタグ ><.*?> <hoge>fuga</hoge> を fuga にしたいのです。 もう少し調べてみて <("[^"]*"|'[^']*'|[^'">])*> としてみましたがどうでしょうか。 >2.「2012.1.1」または「2012.01.01」のような数字の羅列 >(\d{4}).(\d{1,2}).(\d{1,2}) ありがとうございます (\d{4})\.(\d{1,2})\.(\d{1,2}) としました。 >4.「<div class="release">」を含む部分 ><div class="release"> <div class="release"> から</div>までを抜きたいのです。 >5.HTMLタグと文字全て >^.*$ yahoo!pipesには「g」「s」「m」「i」のオプションがあり、現在 ^.*$ にgとmをつけています。 1と2の対応で処理時間が少し短くなりました。