こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【PHP】関数から渡した引数を正規表現で扱うには?

下記(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」でマッチさせたい

投稿日時 - 2014-05-27 02:05:12

QNo.8612319

すぐに回答ほしいです

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

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

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

http://www.php.net/manual/ja/regexp.reference.delimiters.php

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

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

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

<?PHP
$delimiter="/";
$pattern=$delimiter."^".preg_quote($x).$delimiter;
preg_match($pattern, $y);

投稿日時 - 2014-05-27 13:29:21

お礼

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

投稿日時 - 2014-05-27 23:19:39

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2014-05-27 11:41:57

お礼

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

投稿日時 - 2014-05-27 23:20:59

ANo.1

PHP Manual - glob
http://www.php.net/manual/ja/function.glob.php

この関数では不十分ですか?

投稿日時 - 2014-05-27 03:08:37

お礼

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

投稿日時 - 2014-05-27 23:15:50

あなたにオススメの質問