• ベストアンサー

正しい正規表現を教えてください

お世話になります。 正規表現で次のように指定しているのですが、正確か自信がありませんので 正しい表記を教えてください。 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に時間がかかっている場合、正しくない正規表現が原因らしいのです。 どうぞ宜しくお願いします。

  • PHP
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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タグと文字全て >^.*$ 複数行にまたがる場合など考慮していますか? 単純に考えれば「.*」で十分かと (修飾子などで調整が可能)

tse-sie
質問者

補足

ありがとうございます。 >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の対応で処理時間が少し短くなりました。

関連するQ&A

  • 正規表現

    分かりづらい質問で申し訳ありませんが、PHPの正規表現で教えて下さい。 現在下記のような文字列があります。 見やすく改行しましたが、本来は改行はなく、1行です。 最初にPタグがあり、次に複数のクラスが付いたdiv(これを①とします)、同じく複数のクラスが付いたdivタグ(これを②とします)があるような構造です。 このdivタグの中にはfigureタグ、その中にimg タグがあります。 ②番目のdivの中のimgのsrcには特定の文字列があります。 この特定の文字列を含む親のdivタグ全体を抜き出す正規表現を書きたいと思っています。 つまり、正規表現の結果下記部分が抽出できればと思います(これを「正解」とします)。 <div class="(省略)"> <figure> <img src="{特定の文字列}"> </figure> </div> 現在このように記述しましたが、①、②全てのdivが取得されてしまっている状態です。 「/<div class="se-component se-image-container __se__float-none" contenteditable="false">(?>).*<\/div>/i」 これを「正解」のように抽出するにはどのような正規表現になるのでししょうか? よろしく御願い致します。 <p>ghoge</p> <div class="se-component se-image-container __se__float-none" contenteditable="false"> <figure style="margin: 0px;"><img src="data:image/jpeg;base64,/9j/4AA" alt="" data-rotate=""> </figure> </div> <div class="se-component se-image-container __se__float-none" contenteditable="false"> <figure style="margin: 0px;"><img src="{特定の文字列}" alt="" data-rotate=""> </figure> </div>

    • ベストアンサー
    • PHP
  • 正規表現 ""で囲まれた内部は処理しない方法

    正規表現でタグ内の項目内容に""をつける処理を考えています。 現在は、= の右側にある内容を""で囲む処理をしています。 C#で書いたコードは次ような感じです。 text = Regex.Replace(text, "(\\S)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline); このときに次のようなHTMLコードがあった場合、  <div id=000 class="tayp1,type2">  <div id="111" class=type1>  <img src="200.gif" alt="100+100=200"> すると次のような結果になります。  <div id="000" class="tayp1,type2">  <div id="111" class="type1">  <img src="200.gif" alt="100+100="200""> 3行目はalt内にも=があるため間違った処理をしてしまいます。 誤:alt="100+100="200"" このような""内部は処理しないようにするにはどうすればよろしいでしょうか? ""内部の=にはヒットしななれば…と思っているのですが。 よろしくお願いします。

  • Perlの正規表現

    Perlの正規表現 Perlの正規表現で質問です。 MT4.13を使用して携帯用サイトを構築しています。 今現在、携帯用記事中の画像を縮小して表示しようと「regex_replace」を 使って、記事中のimgタグからsrc部分を抜き出して外部のphpに飛ばしています。 <$MTEntryBody regex_replace="/<img (.*?)src=\"(.*?\.jpg)\"(.*?)>/ig","<img src="phpスクリプト?img=\\2" border="0" />"$> 記事中のjpg(JPG)画像のsrc部分を拾って、phpに渡し、GDで縮小した画像を表示すると言った感じです。 しかし、regex_replaceの正規表現部分が上手く機能していないのか、jpg画像の最後の一枚のみ変換されると言った具合です。 JPG画像も含めて、記事中全てのjpg(JPG)画像を縮小して表示したいのですが、正規表現が思い浮かばず質問しました。 上記以外にも /<img (.*?)src=\"(.*)?(\.jpg|\.JPG)\"(.*?)>/ig などとしましたが上手くいきませんでした。 ちなみに、phpで画像を縮小する部分は問題なく動作しています。 以上、宜しくお願い致します。

  • 正規表現

    デコメをPHPで受信するプログラムを作成しています。 htmlをこのように修正しました。 ---------------------------------- <DIV style="background-color:#FFCCFF"> <DIV>1<IMG src="cid:01@100112.210419@____SO903i@docomo.ne.jp"></DIV> <DIV>2<IMG src="cid:02@100112..210419@____SO903i@docomo.ne.jp"></DIV> <DIV>3<IMG src="cid:03.100112.161836__930SC@softbank.ne.jp"></DIV> <DIV>4<IMG src="cid:04@100112.173217"></DIV> </DIV> ---------------------------------- IMGタグは機種によって異なるので、あえて混合させています。 これを正規表現でcid:の後の数字だけに入れ替えたいです。 可能でしょうか。 ---------------------------------- <DIV style="background-color:#FFCCFF"> <DIV>1<IMG src="01"></DIV> <DIV>2<IMG src="02"></DIV> <DIV>3<IMG src="03"></DIV> <DIV>4<IMG src="04"></DIV> </DIV> ---------------------------------- よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 正規表現で複数行に渡る範囲を取り出す

    <html> <div></div> <div class="content"> <b>内容<b/><br /> <img src="#" /> <p>ほげほげほげほげ</p> </div> <div></div> </html> 上のようなHTMLがあるとします。<div>の前後にもhtmlは書かれています。 そこから正規表現で<div class="content">~~~</div>の中身を取り出したいのですが、できません。 言語はPHPで、 /<div class=\"content\">.*<\/div>/ と書いてみたんですが、改行などがありうまくいきませんでした。 どのようにに記述すればうまくいくんでしょうか。

    • ベストアンサー
    • PHP
  • 至急*正規表現教えて下さい

    お世話になります。 正規表現で次のようにしたい場合の記述を教えてください。 1.HTMLタグ全てを削除 現在は <("[^"]*"|'[^']*'|[^'">])*> と指定しています。 2.「2012.1.1」や「2012.1.10」など一桁の数字だけ「2012.01.01」「2012.01.10」と二桁にしたい。 「2012.12.12」などは二桁のままにしたい 現在 (\d{4}).(\d{1-9}).(\d{1-9}) を $1.0$2.0$3 としたら 2012.1.10が2012.01.01 と下一桁が無視されてしまいました… 3.HTMLタグと文字全て 現在 ^.*$ 使用したい場所はYahoo!pipesです。 宜しくお願いします!

    • 締切済み
    • PHP
  • 正規表現に困っています!!

    以下のような文字列にある「@1」・「@2」・「@3」・「@4」を抜き出したいのですが、 どんな正規表現を使用すれば良いか教えて頂けると非常に助かります。 <!-- #BeginLibraryItem "/Library/image01.lbi" -->\r\n <div class="@1"><img src="@2" alt="@3"></div>\r\n <p class="captionBlockA01 center">@4</p>\r\n <!-- #EndLibraryItem -->

  • 正規表現による置換

    HTMLの構文も正規表現もよく理解しないままに作業をしているので とんちんかんなことを言っているのかもしれません 合わせて指摘してもらえると助かります Yahoo pipes 使ってる中で発生している現象です 目的としては HTMLタグから一部の文字列を取り出したく 変換元のXTMLは以下のようなものです(一部加工しています(***** の部分は隠しています) <a rel="nofollow" target="_blank" href="http://*****.html">抽出したい文字列</a> <img alt="new" class="new" height="15" src="http://*****.jpg" width="32"/> に対して 置換対象  .*html">(.*)  置換後  $1   を行ってからさらに 置換対象  (.*)<img.*    置換後  $1  としたところ 一応抽出はできました    本来 2回目は  (.*)</a  の気がするのですが1回目の結果を見るとなぜか</a>    の部分もなくなってしまっています  これも不思議なのですが 2回に分けて行うのは面倒なので1度で行いたいと思い 置換対象  .*html">(.*)<img.* 置換後  $1 としてみたのですが 求めている文字列の抽出をすることができませんでした     .一応 *html">(.*)</a.*  というのもやってみましたが結果は変わりませんでした これは当然の結果ななのか変換(処理)ツールの不具合なのかの判断ができません 分かる人がいたら教えてもらえないでしょうか 情報足りなければ補足させていただきます

  • 正規表現について

    アメブロから独自ブログへ引越しを行うことになったのですが、 ペタしてね というリンク画像を毎ページに張り付けており、この画像リンクを一括で削除したいと思っています。 HTMLタグのパラメータが微妙にばらついており、正規表現の利用が必要かなと思っています。 専用のプラグインをインストールし、正規表現を利用して削除できることが分かったのですが、 正規表現の方法を数時間勉強してみましたが、結局どうすればいいのかわかりません・・・ 削除する画像リンクは以下のようなものです。 <a href="http://.........................."><img height="100" alt="ペタしてね" src="http://stat.ameba.jp/blog/ucs/img/decoPeta/pc/decoPeta_18.gif" width="100" /></a> width や hight がページによって微妙に違うようです。 どちらさまか、上記のようなタグをマッチングさせる正規表現を教えていただけませんでしょうか。

    • ベストアンサー
    • PHP
  • 正規表現についての質問です。

    正規表現についての質問です。 現在、HTMLのimgタグを使って「/img/jpg/」ディレクトリにある画像ファイルを複数表示しています。 例) <img src="/img/jpg/1111.jpg" > <img src="/img/jpg/mm2222.jpg" > <img src="/img/jpg/kkkkk3333.jpg" > これをそれぞれ、以下のように置換したいと考えています。 例) <a href="http://www.xxxxx.jp/1111.jpg"><img src="/img/jpg/1111.jpg" width="240px"></a> <a href="http://www.xxxxx.jp/mm2222.jpg"><img src="/img/jpg/mm2222.jpg" width="240px"></a> <a href="http://www.xxxxx.jp/kkkkk3333.jpg"><img src="/img/jpg/kkkkk3333.jpg" width="240px"></a> imgタグをリンクタグで囲むのですが、リンク先URLには元々の画像ファイル名が使われています。また、imgタグには「width="240px"」が付加されています。 このような置換をPHP5で行うには、どのような正規表現を使用したらよろしいでしょうか。 宜しくお願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう