Carpe Diem

  Top > スポンサー広告> PHP > preg_match() 正規表現によるマッチング  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

preg_match() 正規表現によるマッチング

2011 - 10/07 [Fri] - 13:15

ファイルの選別で必要になったのでメモ。これまたネットの間違い情報のせいでしばらく悩んだ。

定義

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

返り値はマッチした回数です。マッチすれば1、マッチしなければ0です。

編集するのは基本的に$patternと$subjectです。$subjectの方はファイル名なので特に問題ないと思います。
一方$patternの方はやや変わってます。
まずはスラッシュ「/」でマッチ判定の部分を囲みます。公式にはデリミタと言うらしいです。こんな感じ

$pattern = "/He/";

この場合$subjectに「He」が含まれれば返り値として1が返ります。
ここまでは簡単です。ポイントは正規表現を使用する場合です。

正規表現の使用方法としては以下のようになります。TRUEとありますが返り値は1です。

// phpが含まれていれば、TRUE
preg_match('/php/', $string);

// phpで始まる場合、TRUE
preg_match('/^php/', $string);

// phpで終わる場合、TRUE
preg_match('/php$/', $string);

// phpに一致した場合、TRUE
preg_match('/^php$/', $string);

// 空の場合、TRUE
preg_match('/^$/', $string);

// phpaまたはphpbの場合、TRUE
preg_match('/^php(a|b)$/', $string);

// phまたはphpの場合、TRUE
preg_match('/^php?$/', $string);

// php、phpa、phpabなどの場合、TRUE
preg_match('/^php.*$/', $string);

// phpa、phpabなどの場合、TRUE
preg_match('/^php.+$/', $string);

// 英小文字2文字の場合、TRUE
preg_match('/^[a-z]{2}$/', $string);

// 英小文字2文字または3文字の場合、TRUE
preg_match('/^[a-z]{2,3}$/', $string);

// 英小文字2文字以上の場合、TRUE
preg_match('/^[a-z]{2,}$/', $string);

// 数字2文字以上の場合、TRUE
preg_match('/^[0-9]{2,}$/', $string);

// 英数字2文字以上の場合、TRUE
preg_match('/^[A-Za-z0-9]{2,}$/', $string);


で、zipファイル内の冗長フォルダと.dbファイルを除外したくて書いてのが下。
フォルダは最後が「/」で終わるのでエスケープ「\」を付け、「.db」もドットに対してエスケープを使用します。

if(preg_match("/.+\.db$/i", $filename)==0 && preg_match("/\/$/", $filename)==0)

これでちゃんと除外できるようになりました。
最初に言ったようにネットには間違った表現もあるので、error.logを確認しながら利用してください。

ソース:
PHP: preg_match - Manual
正規表現
PHP 正規表現の基本 (preg_match)
正規表現パターンに使用可能な修飾子

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。