• ベストアンサー

preg_match関数で正規表現の複数指定方法。

./aaaディレクトリ内においてファイル名に、『bbbb』及び『cccc』と言う文字列が含まれるファイルを./eeeディレクトリに移動させるスクリプトを考えております。 以下は『bbbb』のみを拾うようなスクリプトです。 ========= <?PHP if ($dir = opendir("./aaa")) { while (($file = readdir($dir)) !== false) { if(preg_match("/bbbb/",$file)) rename("./aaa/".$file,"./eee/".$file); } closedir($dir); } ?> ========= 上記は前にこちらで質問させていただき、正常に動くことを確認しております。 今回は『bbbb』及び『cccc』が含まれる場合に./eeeディレクトリに移動させることを考えております。 このような場合は『cccc』はどのよう記載すればよいのでしょうか?ご教授の程よろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

どちらとも含まれる場合と言う意味ですよね? 単に preg_match をもう一回やればいいのではないかと。 if(preg_match("/bbbb/",$file)) { if(preg_match("/cccc/",$file)) { rename("./aaa/".$file,"./eee/".$file); } }

wf3255
質問者

お礼

ご回答ありがとうございます。 解決できました。ホントに助かりました。ありがとうございます。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

#1さんの回答を見て疑問に思ったのですが、 「bbb及びcccc」が含まれる場合というのは、bbbbとccccがともに 含まれている場合、あるいはいずれかが含まれている場合。 どちらでしょうか? わたしは前者ではないかととったのですが。

wf3255
質問者

お礼

早急な補足要求ありがとうございます。 補足が遅れてしまい申し訳ございません。 #3様の回答で上手く動きましたが、“bbbbとccccがともに 含まれている場合”の部分をご指摘くださいましてありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ご自身で正規表現について学習なさることをオススメします。 とりあえずは preg_match("/bbbb|cccc/",$file)

wf3255
質問者

お礼

ご回答ありがとうございます。 結果としては#3様の回答で上手く動きましたが、 正規表現について少しだけ知識がつきました。 ありがとうございます。

関連するQ&A

  • クーロンであるファイル名に特定文字列があるかをチェックする

    あるディレクトリ内(./)のファイルをチェックし、特定の文字列(".aaa"と"cccc"の両方)があるかをチェックし、その特定の文字列が含まれるファイルがあればあるメールアドレス宛(xxx@mmm.com)にメールを送信するスクリプトを考えています。下記スクリプトの☆☆☆のところにその関数が入ると思うのですが、自力では解決不能なためご教授願います。 <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/.aaa/",$file)) { if(preg_match("/cccc/",$file)) { ☆☆☆ } } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • 条件分岐~同じファイル名がある場合は実行せず

    下記スクリプトにてカレントディレクトリにaaaaおよびbbbbという文字列が存在するファイルを./ccc/dddディレクトリに移行するということを行っています。 下記スクリプトでコピーの処理がありますが、 同じファイル名が./ccc/dddディレクトリに存在する場合、そのファイルについてのみコピーを行わないようにするスクリプトを考えております(同じファイルを何度も./ccc/dddディレクトリにコピーするという事を無くしたいため)。 どなたかお分かりでしたらご教授ください。 実際にスクリプトに追加していただけると助かります。 php4.3.2です。 ======== <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/aaaa/",$file)) { if(preg_match("/bbbb/",$file)) { copy("./".$file,"./ccc/ddd/".$file); } } } closedir($dir); } ?> ========

    • ベストアンサー
    • PHP
  • ディレクトリ内の拡張子指定ファイル移動

    自分では難解で、同じような質問がなかったため質問します。私は新米です。 ルートディレクトリ(./)内の拡張子が『.send』のファイルを全て別のディレクトリ(./back)に移動するクーロンを組もうと思っているのですが、ルートディレクトリのパーミッションが750のためか下記のスクリプトですと、copyの行及びunlinkの行でPermission deniedのエラーが出ます。 ./backディレクトリに関しては777にしています。 ルートディレクトリのパーミッションはサーバーの仕様で変えられないのですが、何か有効がありますでしょうか?どうかご教授ください。 <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/.send/",$file)) { copy("./".$file,"./back".$file); unlink("./".$file); } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • ファイル名を一括変更したいが正規表現方法を教ええください。

    リモート側のファイル名を一括変更したのですが、正規表現の方法がわかりません。 現在は以下のとおり記述しています。 opendir(DIR, $FTPdir); @FTPlist = grep (/^$head$year$mon$mday.*\.csv$/, readdir(DIR)); closedir(DIR); if (@FTPlist){ foreach (@FTPlist) { rename /^$head$year$mon$mday.*\.csv$/,/^$head$year$mon$xday.*\.csv$/,); print ; print "\n"; } }

    • ベストアンサー
    • Perl
  • ファイルコピー

    「ルートディレクトリ内の全てのファイルの中でファイル名に"1111"及び"2222"と言う文字列が含まれるファイルを./333/444ディレクトリに同じファイル名が無ければコピーする」 というスクリプト(下記qqq.php)を作りましたが、 「ルートディレクトリ内の全てのファイルの中でファイル名に"1111"及び"2222"と言う文字列が含まれるファイルの中で最もファイル更新時刻が新しいものだけを./333/444ディレクトリに同じファイル名が無ければコピーする」 と変えたいのですがどうも上手くいきません。 この『・・・文字列が含まれるファイルの中で最もファイル更新時刻が新しいものだけを・・・』の部分につきまして、ご教授ください。 スクリプトを記載していただけるととても助かります。 どうか宜しくお願いいたします。 ********************* qqq.php <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/1111/",$file)) { if(preg_match("/2222/",$file)) { $to="./333/444/".$file; if(!file_exists($to)) copy("./".$file,$to); } } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • renameでのPermission deniedエラー

    下記スクリプトを実行すると、『Warning: rename(./aaa/bbb.send,./aaa/bbb.send.gz) [function.rename]: Permission denied in ...line 31←renameの行数』というエラーになります。 =========== <?php $dir = opendir("./aaa"); $latestfile=0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("./aaa/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename =$fnm; $filename = "./aaa/$latestfilename"; $fp = fopen($filename, "rwb+"); fread($fp, 18); //18バイト読み飛ばす ftruncate($fp, 0); $warn = ''; while (!feof($fp)) { $warn .= fread($fp, 8192); } rewind($fp); fwrite($fp, $warn); rename($filename,"$filename.gz"); fclose($fp); } } closedir($dir); ?> ============= renameの手前でchmodを実行させ、aaaディレクトリ及びファイル自身(./aaa/$filename)にパーミッション0777を与えても現象は変わりません。renameする$filenameにつきましても./aaa/$filenameとしたり、./aaa/$latestfilenameとしてみましたがやはり変わりませんでした。 解決策があればご教授願います。

    • ベストアンサー
    • PHP
  • filemtimeについて

    filemtime関数を使ってあるディレクトリ(./aaa)の中の最新のファイルを表示させようとしていますが、少し前までは上手くいっていたのですが、急に予定通りに動かなくなってしまい、ちょっと自分では解決できないため質問させていただきます。 スクリプトは下記になります。 <?php $dir = opendir("./aaa"); $latestfile=0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; clearstatcache(); $ftime = filemtime("./aaa/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; $filename = "./aaa/$latestfilename"; echo "$filename"; } } closedir($dir); ?> これで実行すると、aaaディレクトリ内のファイル名が全て表示されてしまいます。※ファイルの更新日時はファイルごとに異なっています。 どなたかご教授願います。

    • ベストアンサー
    • PHP
  • CGIがある場所以外のディレクトリの内容表示方法

    ディレクトリ内にあるファイルの一覧を表示しようとしていますがうまく出来ません。 ---------------- opendir(DIR, "./"); @dir_value = readdir(DIR); closedir(DIR); ---------------- この状態だともちろんですが、CGIがあるディレクトリの一覧を表示します。(この状態で、表示する部分のプログラム(ソース?)が間違っていないことはわかります) この1つ下(同ディレクトリ内に「img」ディレクトリ作成)の内容を表示したいのですが、うまく出来ません。 単純に、 ---------------- opendir(DIR, "./img"); @dir_value = readdir(DIR); closedir(DIR); ---------------- と、してみましたがファイルを表示しません。 他にも、「./img/」または絶対パス(/home/~~)でもだめでした。 下または上のディレクトリを参照するのには上記変更だけでは出来ないのでしょうか? 方法がありましたらお願いします。

    • ベストアンサー
    • CGI
  • readdir()で得られるファイル・ディレクトリ情報の順番は?

    Perlプログラムにて、  opendir(DIR, '.');  @dir_list = readdir(DIR);  closedir(DIR); などとすると、そのディレクトリにあるファイルとディレクトリの一覧情報を得ることができますが、この場合、@dir_list にはどのような順番で情報が格納されるのでしょうか? readdir() 関数の仕様が知りたいです。ご存知の方、ぜひ教えてください。

    • ベストアンサー
    • Perl
  • PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラム

    PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラムで「test」というディレクトリ内のファイル一覧(ディレクトリ名とファイル名)を表示するようにしているのですが、この中からディレクトリ名のみ表示させたいのですがどのようにすればいいのでしょうか? よろしくお願いします。 <?php if ($dir = opendir("test/")) { while (($file = readdir($dir)) !== false) { if ($file != "." && $file != "..") { echo "$file<br>\n"; } } closedir($dir); } ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう