プロが教える店舗&オフィスのセキュリティ対策術

下記(1)はディレクトリ「sample_dir」のファイル一覧を取得し、ファイル名「hogehoge」から始まるものだけを一覧表示させたものです。
「hogehoge」以外の文言でも絞り込めるように関数を呼び出して((2))、指定文言を引数で$xに渡したいのですが、引数が認識されません。
引数を正規表現で扱うには、どのように記述したら良いですか。
ご教示をお願いします。

----------------------------------------
(1)
----------------------------------------
//対象ディレクトリ
$dir_s="./sample_dir";

//ディレクトリ内のファイルを取り出す
$filelist=scandir($dir_s);

//ファイル数をチェック
$count=count($filelist);

for($i=0; $i<$count; $i++){
$y = ($filelist[$i]);
if(preg_match("/^hogehoge/", $y)){
print_r($y);
}
}

----------------------------------------
(2)
----------------------------------------
function file_search($x){
for($i=0; $i<$count; $i++){
$y = ($filelist[$i]);
if($z = preg_match($x, $y)){
print_r($y);
}
}
}
file_search("/^filename/"); //引数「filename」でマッチさせたい

A 回答 (3件)

とりあえずpreg系の基本だけ理解した方がいいでしょう



・検索文字はデリミタで囲う

http://www.php.net/manual/ja/regexp.reference.de …

・予約語との競合をさけるため変数でパターンを渡すときにはpreg_quote()でエスケープする

http://www.php.net/manual/ja/function.preg-quote …

当然処理するためのメタ文字はクォートしてはいけません

<?PHP
$delimiter="/";
$pattern=$delimiter."^".preg_quote($x).$delimiter;
preg_match($pattern, $y);
    • good
    • 0
この回答へのお礼

メタ文字をクォートしてしまっていたのがミスだったようです。
デリミタの囲い方など、解りやすくご説明いただきありがとうございました。

お礼日時:2014/05/27 23:19

function file_search($x) の定義で、関数内で使用する $count や $filelist が渡されていないので正常に動作しないのではないでしょうか。

    • good
    • 0
この回答へのお礼

メタ文字指定の記述が間違っておりました。ありがとうございました。

お礼日時:2014/05/27 23:20

PHP Manual - glob


http://www.php.net/manual/ja/function.glob.php

この関数では不十分ですか?
    • good
    • 0
この回答へのお礼

一発で結果が得られました。
ありがとうございます!

お礼日時:2014/05/27 23:15

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