おすすめのモーニング・朝食メニューを教えて!

正規表現で、00で始まる画像をgrep検索したいのですが、どう書けばよいでしょうか?

ネットで調べてやってみたところ、下記のような感じになったのですが、もう少しスマートな書き方をするには、どうすればよいでしょうか?
00+.+.+(?=jpg)

これだと、例えば「004-main.jpg」だけではなく、「400-thumbs.jpg」なども検索されてしまいます。

■探したい対象の中身の例(明示的な規則性はありません)
900.jpg
<img src="images/400_300_1.jpg" alt="正規表現分からない" width="400" height="300" border="0">400_300_2.jpg<a href="#" target="_blank"></a> 002_main.jpg <br />005.jpg<br /> 006_thumb.jpg

■また、行の先頭にマッチするという「^」について知りたいのですが、行頭というのは何を持って 行頭と見做されるのでしょうか? 改行の後の文字=行頭ということなのでしょうか?

■例えば、下記のような中から、005-main.jpgを検索しようとする場合、必ず<br />の後に005-main.jpgがくる、みたいな法則性がないと、いわゆる単語単位での切り取りみたいなのは出来ないのでしょうか?
<br />005-main.jpg<br />

A 回答 (2件)

grepもいろいろ種類があって、使える正規表現が違うものがある(正規表現が使えない紛い物まで存在する!)ので、一番基本的な正規表現だけで書くとこんな感じでしょうか。



[>/"] *00[^.]*\.[jJ][pP][gG]

この式の弱点は、行頭にあるものは見つけられないことです。また、HTMLタグの中に書かれていないものもダメです。

で、行頭ですが、文頭を除いて改行の次で合っています。改行しかない行(空行)は、行頭であると同時に行末でもあるという扱いになり、^$という式で表せます。

余談ながら、grepの場合は検索だけなので問題にならないのですが、sedやawk,perlなどのテキスト処理言語やエディタなどの置換できるツールで、行頭や行末を加工した場合は話がややこしくなります。なぜなら新たな行頭や行末が発生してしまうため、これをどう扱うのかという話になるからです。正しくは、行頭や行末に対する置換は一度しか行われないことですが、これを正しく実装できていないエディタもあるので、注意が必要です(特に行頭)。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
また、アドバイスもいただき、ありがとうございました。

>grepもいろいろ種類があって、使える正規表現が違うものがある(正規表現が使えない紛い物まで存在する!
>行頭や行末に対する置換は一度しか行われないことですが、これを正しく実装できていないエディタもあるので、注意が必要です(特に行頭)。

実はツールとエディタと双方で試していて、処理結果が微妙に違うのにも悩んでました。
大変勉強になりましたー!

お礼日時:2010/09/22 11:29

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


ということで, 書籍を紹介するにとどめておこう.

参考URL:http://www.oreilly.co.jp/books/9784873113593/
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

ちょっと、厚そうな本だけど、
今度、本屋へ行ったとき、チェックしてきますー。

お礼日時:2010/09/22 11:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報