コンテンツにスキップするには Enter キーを押してください

タグ: 正規表現

phpでアバウトなファイル検索ができるglob関数

なかなかハードなコーディングをしない限り、お世話にはならんだろう「glob」関数。
コイツはフルパス中のファイル・ディレクトリをアバウトに検索する折に役立ってくれますよ!

// 例えば、下記ディレクトリに
$dir = dirname(__DIR__) . "/public/thumbnail/member/";

// 1.すべてのJPGを探したいYO
$find[0] = "*.jpg";

// 2.サブパス+拡張子度外視で指定名のファイルを探したいYO
$find[1] = "F999999*";

// 3.指定の拡張子を探したい
$find[2] = "*.{jpg,gif,png}";

// 4.正規表現使いたい(F***.jpgとかF******.mp4とか)
$find[3] = "(F\d+)\.(jpe?g|mp4|m3u8)";

// 検索結果
// 1.は一次元配列下に結果が格納される
$files = glob($dir . $find[0]);
print_r($files);

/*
[0] => /var/www/project/app/storage/public/thumbnail/member/akira.jpg
[1] => /var/www/project/app/storage/public/thumbnail/member/F001.jpg
[2] => /var/www/project/app/storage/public/thumbnail/member/noimg.jpg
*/

// 2.同様
$files = glob($dir . $find[1]);
print_r($files);

/*
[0] => /var/www/project/app/storage/public/thumbnail/member/F999999.mp4
[1] => /var/www/project/app/storage/public/thumbnail/member/F999999/thumbs/005.webp
[2] => /var/www/project/app/storage/public/thumbnail/member/F999999/thumbs/trush/000.gif
*/

// 3.拡張子の複数指定には引数を使う
$files = glob($dir . $find[2], GLOB_BRACE);
print_r($files);

/*
[0] => /var/www/project/app/storage/public/thumbnail/member/F999999.jpg
[1] => /var/www/project/app/storage/public/thumbnail/member/F999999.gif
*/

// 4.パターンにより、結果は多次元配列化
$files = glob($dir . $find[2]);
print_r($files);

/*
[0][0] => /var/www/project/app/storage/public/thumbnail/member/F99.jpg
[0][1] => /var/www/project/app/storage/public/thumbnail/member/F99.m3u8
[1][0] => /var/www/project/app/storage/public/thumbnail/member/F9999999.mp4
*/
コメントする

おい仕事しろ

PCREの文字列グループ化に於けるメモリキャッシュの無効化ぐらい頭に入れておけ、正規表現厨ども!!

<?php
$str = "救急車\nパトカー\n消防車\n救急車\n霊柩車\nロードローラー\nショベルカー\n";
$pattern = "/(:?パトカー|消防車|救急車|ショベルカー)/";
$replace ="ハイパー救急車";

echo $str;
echo "---------------\n";
echo preg_replace($pattern,$replace,$str);
2 Comments

この世の99%のEメールアドレスにマッチする正規表現、現る

私はphpフレームワークを使っているので、EメールアドレスのバリデーションをPCRE準拠で組む機会は殆どありません。
そして、様々なサイトで上記正規表現のソースコードを見せ合い激論を起こす。なんて光景も嫌というほど見てきましたw

もういいでしょう、やっとこRFCにほぼ完全に準拠した正規表現のソースコードが出てきたのだから。

Perl, php, Python, Ruby, JavaScript, .NET
上記言語毎にソースコードが記載されています。

コメントする

正規表現をマスターすべし

CSVからXMLを作れたり、パターン化されたデータシートを一括カスタマイズ出来たりとルーチンワークがラクになりますぜ!
正規表現は、プログラミングのためのノウハウだけではないのです。
秀丸やIDEではPOSIX正規表現がデフォルトで使えるし、sedコマンドやgrepコマンド、vimでの文字列置換でも大活躍!

例えば、Webサーバ上にアップしていたHTMLファイルの末尾にスパミーなJavaScriptが不正に書かれていたとする。

sed -e "s/[\t\n]*\<script\>eval\(p\,a\,c\,k\,a\,g\,e[^\<\/script\>]+\<\/script\>[\t\n]*//g" $1 | grep -lr "/[\t\n]*\<script\>eval\(p\,a\,c\,k\,a\,g\,e[^\<\/script\>]+\<\/script\>[\t\n]*/" /path/to/website

これで手作業なく怪しいスクリプトコードを一発全削除出来る。
テキストファイルを一枚一枚チェックして怪しいコードを抜き取る無駄作業をしなくてもよくなりましたとさ。

ってなカンジで、お仕事に正規表現を取り込んでみよう( ^ヮ^)ノ

コメントする