• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現で、00で始まる画像をgrep検索したいのですが、どう書けばよ)

正規表現で00で始まる画像のgrep検索方法と行の先頭にマッチする^の意味について

このQ&Aのポイント
  • 正規表現を使用して、00で始まる画像をgrep検索する方法についてのアドバイスをお願いします。また、行の先頭にマッチする^の意味についても教えてください。
  • 現在は00+.+.+(?=jpg)という正規表現を使用していますが、これでは「004-main.jpg」だけでなく「400-thumbs.jpg」なども検索されてしまいます。よりスマートな書き方を教えてください。
  • また、行の先頭にマッチする^は、改行の後の文字を指すのでしょうか?例えば、指定された文字列の前に必ず特定の文字列があるという条件を指定することはできるのでしょうか?

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

  • ベストアンサー
noname#194317
noname#194317
回答No.2

grepもいろいろ種類があって、使える正規表現が違うものがある(正規表現が使えない紛い物まで存在する!)ので、一番基本的な正規表現だけで書くとこんな感じでしょうか。 [>/"] *00[^.]*\.[jJ][pP][gG] この式の弱点は、行頭にあるものは見つけられないことです。また、HTMLタグの中に書かれていないものもダメです。 で、行頭ですが、文頭を除いて改行の次で合っています。改行しかない行(空行)は、行頭であると同時に行末でもあるという扱いになり、^$という式で表せます。 余談ながら、grepの場合は検索だけなので問題にならないのですが、sedやawk,perlなどのテキスト処理言語やエディタなどの置換できるツールで、行頭や行末を加工した場合は話がややこしくなります。なぜなら新たな行頭や行末が発生してしまうため、これをどう扱うのかという話になるからです。正しくは、行頭や行末に対する置換は一度しか行われないことですが、これを正しく実装できていないエディタもあるので、注意が必要です(特に行頭)。

re999
質問者

お礼

ご回答ありがとうございました。 また、アドバイスもいただき、ありがとうございました。 >grepもいろいろ種類があって、使える正規表現が違うものがある(正規表現が使えない紛い物まで存在する! >行頭や行末に対する置換は一度しか行われないことですが、これを正しく実装できていないエディタもあるので、注意が必要です(特に行頭)。 実はツールとエディタと双方で試していて、処理結果が微妙に違うのにも悩んでました。 大変勉強になりましたー!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

正規表現はプログラムによって異なります. したがって, ものによっては「プログラムA では使うことができるがプログラムB では使えない」こともあります. また状況によって解釈が変わることもあります. ということで, 書籍を紹介するにとどめておこう.

参考URL:
http://www.oreilly.co.jp/books/9784873113593/
re999
質問者

お礼

ご回答ありがとうございました。 ちょっと、厚そうな本だけど、 今度、本屋へ行ったとき、チェックしてきますー。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • さくらエディタでGrep検索する時の正規表現

    さくらエディタでGrep検索する時の正規表現 「ABC」が含まれていて「DEF」が含まれない行という正規表現は どのように指定すればよいのでしょうか?

  • 正規表現で「除く」

    windows用のエディタの「VIVI」というのを使っています。 grepで「2002/09/01」という文字列を含まないテキストを検索したいのですが、正規表現での検索の方法を教えていただけないでしょうか。 #どのエディタも同じではないかもしれませんが。 #自分は、正規表現のことは素人です。単に上記条件の日付のみを変更して使いたいだけ・・ (^^;

  • この検索を正規表現にするにはどう書けばいいでしょう?

    (name.gif)、('name.jpg')、(name_a.png)があって その中身のback.gifだけを検索で拾いたいのです。 自分なりに調べて \w+\w+(.gif|.jpg|.png) で ()、('')を除いた中身だけを拾えるようになったのですが、時々 (name-b.gif)、('n-ame.jpg')、(n-a-m-e.png) のようにハイフンが混じっているものが拾えなく困っています。 ハイフンも混じっても大丈夫な正規表現の書き方を どなたか教えてください。

    • ベストアンサー
    • PHP
  • 正規表現の否定先読みについて

    <a href="http://example.com/aaaa/hogehoge1.jpg" target="_blank"><img src="http://example.com/aaaa/hogehoge1.jpg" width="100" alt="huge1"></a><br />hogehoge<br /><a href="http://example.com/bbbb/hogehoge2.jpg" target="_blank"> <img src="http://example.com/bbbb/hogehoge2.jpg" alt="huge2"></a> こういうHTMLがあるとします。改行はなく1行です。 このHTMLから正規表現で 『width="100"がついていない<img>タグ』 のsrc=""までを抜き出して置換したいのです。 期待する結果は <img src="http://example.com/hage/hogehoge2.jpg" です。 そこで /<img src="http:\/\/.*?.jpg"\s(?!width)/ というパターンを試しましたが、.*?の最短一致が思った通りにいかず <img src="http://example.com/aaaa/hogehoge1.jpg" width="100" alt="huge1"></a><br />hogehoge<br /><a href="http://example.com/bbbb/hogehoge2.jpg" と、1つ目の<img>が入ってしまい、2つ目の<a>タグまで抜き出されてしまいます。 これをうまくwidth="\d+"と入っていない<img>タグのみに適用させる方法はないでしょうか? どなたかよろしくおねがいいたします。

    • ベストアンサー
    • PHP
  • パターン検索の方法、正規表現

    <TD><IMG src=".jpg"></TD> <TD>●<BR>単語<BR>単語</TD> というパターンの箇所を一気に <TD><IMG src="●.jpg"></TD> <TD>●<BR>単語<BR>単語</TD> に検索置換したいのですが、どうしたらいいのでしょうか?●は4~5桁の数字がほとんどですが、中に英文字が入ったものもあります。 今、わからなくて、●をコピペして.jpgの前にはりつけて作業しています。これがわかるとすごくたすかります。 小学生が宿題教えてっていってるような質問ですみませんが、すごい困ってるのでどなたか教えて下さい。 あと、この正規表現、パターン検索を勉強するのに わかりやすい本とか、参考になるウェブとかあったら教えて下さい。マニュアルを読んでもちんぷんかんぷんなんです・・・T-T

  • 正規表現について

    正規表現について LPIC黒本の問題で1つ困っています。 $ grep -E ^A[^A]A[^A] lpic.txt にマッチする文字列 答え AaAa となっていますが理解できません。 そもそも正規表現ってなんでしょうか? あまり難しいようなら飛ばしますが、 となたか教えてくれるお方おりましたらお願いいたします。

  • 正規表現を用いた特定の位置までの抜き出し方法

    なんか考えると正規表現じゃムリじゃないと思えてきてならないのですが、 Wikipediaのデータのある部分の抜き出し方法です。 [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]] これを、これとして抜き出したいです。 「[[画像:」、「]]」で括られています。それで括られた内部に「[[」、「]]」が 存在する場合もあります。 [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]][[画像:abcd.jpg|thumb|かきくけこ([[かきく]][[けこさ]])]] このパターンなら2つを抜き出したいです。 [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]][[かきくけこ|さしすせそ]] このパターンなら1つを抜き出したいです。 こんな事、可能でしょうか?

    • ベストアンサー
    • PHP
  • grepにマッチした正規表現の文字列を取得したい

    grepにマッチした正規表現の文字列を取得し、マッチした文字列を 一覧で取得したいのですが、方法がわかりません。 ※例 grep [0-9][0-9][0-9][0-9][0-9] 検索ファイル名 > 出力ファイル名 不明点あればお知らせください。 よろしくお願いします。

  • 正規表現で置換

    その1 $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; その2 $str = "<img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "<img src="./foo/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; このような文字列があった時に、次のように従って置換したいです。 1.imgのタグの内部に、「http://yyy.hoge.jp/hage/hige/xxx.jpg」という文字列があった場合、「./foo/faa/fii/xxx.jpg」という文字列に置き換える。 2.それ以外のURLの場合は置換しない。 3.その1とその2では「xxx.jpg」となっていますが、jpg以外の拡張子の場合も存在する。 4.日本語とURLの位置や個数はバラバラです。 5.URLの中のxxxとyyyは不定の文字列で、hage、hoge、hige、foo、faa、fiiは固定です。 6.使用している言語はPHPです。正規表現を1度だけでできれば理想的ですが、今回は2回に渡った処理でも問題ありません。 以上です。正しく処理できる正規表現、あるいは下記の正規表現の誤りを教えて頂ければ幸いです。 お手数ですが、よろしくお願い致します。 下記の方法では、うまくできませんでした。 $pattern = "/http:\/\/.*?hoge.jp\//"; $replacement = "./"; $str= preg_replace($pattern, $replacement, $str); $pattern2 = '/\/?hage\/hoge/'; $str = preg_replace($pattern2, '/foo/faa/fii', $str);

    • ベストアンサー
    • PHP
  • 正規表現の初心者です

    正規表現初心者です。 なぜ、 [0-9]+ という正規表現が下記の112にあたらないのでしょうか? 0-9(数字)の一文字以上の繰り返しなので、複数桁の数字にマッチすると思ったのですが・・。 echo 112|grep -e "[0-9]+" > (マッチせず)