たとえば,
abcdefghijabcdefghijabcdefghij
という文字列について,パターン「c.+g」 に一致するのはこのパターン最長の
cdefghijabcdefghijabcdefg
である.
だもんで,アクセスログの表示はリンク元のURL
http://www.kensaku-saito-no-rei.jp/kiiwaado/くろべえ/a/5/z/9
から「くろべえ」を切り出すとき,スラッシュに挟まったところの文字列を全部拾おうと
url =~ /kensaku-saito-no-rei\.jp\/kiiwaado\/(.+)\//;
となって,余計なものがついてしまう.
これを解決するのが,最短一致のオプション「 ? 」である.
たとえば,
abcdefghijabcdefghijabcdefghij
という文字列について,パターン「c.+?g」 と一致するのはパターン最短の
cdefg
である.
検索語の切り出しは
url =~ /kensaku-saito-no-rei\.jp\/kiiwaado\/(.+?)\// kiridasi = 1; とするだけで, kiridasi = "くろべえ"
だけが切り出される.
アクセスログの検索語の切り出しは,今まで
http://www.google.co.jp/search?hl=ja&q=くろべえ&lr=
といったURL から q= のような部分を探して,= の前の文字 q を指定するだけで「くろべえ」が切り出されるように組んであった.その文字はサイトによって,keyword だったり,query だったり qw だったりいろいろだが,それだけを書き換えればすぐ対応できるようなプログラムだった.
ところが,最近,
http://www.kensaku-saito-no-rei.jp/kiiwaado/検索語/a/5/z/9
のように,そのパターンに当てはまらないサイトが出てきたので,ちょいとプログラムを追加した.
「だもんで・・・」というフレーズは,名古屋の友人を思い出す.
最短一致はよくお世話になります。
返信削除あとは、^と$が便利ですよね。
最近はプログラムしなくなって忘れてました.ネットで調べて,「そうだよ,"?" だよ」と・・・
返信削除昔は sed とか awk とか perl で大量のテキストを一気に処理するのに,ずいぶんと RE を使ったものです.今は RE 対応のテキストエディタでたまに使う程度かな.