PHPプログラムに関する各種メモ書き:タグ「正規表現」での検索

PHPの正規表現検索 preg_match で変数を使う

preg_match で変数を使うにはpreg_quoteを使用します。

string preg_quote ( string $str [, string $delimiter = NULL ] )
$file = 'my_file_123456789';
$needle = 'my_file_'

$pattern = '/' . preg_quote($needle, '/') . '/';
if ( preg_match($pattern, $file) ){
	echo 'マッチします。';
}
No.1017
05/18 13:01

edit

正規表現

PHPでメールアドレスのチェックを【filter_var】【正規表現】で行う。

PHP5.2から filter_var というメールアドレス等をチェックする関数が追加されています。

filter_var でのメールアドレスのチェック

filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);

便利なのですが昔の日本の携帯アドレスはRFC準拠していなくても使えていたみたいですし、そういったアドレスはエラーとされてしまいます。

それなら正規表現のほうがカスタマイズがきいていいような気がします。

正規表現でのメールアドレスチェッククラス【AddressValidate.php】

PHPのメジャーフレームワークの正規表現を網羅してクラス化してあります。便利!

http://d.hatena.ne.jp/m-tag/20081118/1227000201

PHPメジャーフレームワークの正規表現

CakePHP 1.2

/^[a-z0-9!#$%&'*+\/=?^_`|~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`|~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]2,4|museum|travel)$/i

CakePHP 1.3

/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[-_a-z0-9][-_a-z0-9]*\.)*(?:[a-z0-9][-a-z0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,4}|museum|travel)/i

Ethna

/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i

正規表現がチェックできるサイト

http://www.rubular.com/


Perlの場合CPANの Email::Valid を使うのがいいでしょう

http://search.cpan.org/search?query=Email%3A%3AValid&mode=all


参考

http://d.hatena.ne.jp/j0hn/20070602

http://d.hatena.ne.jp/m-tag/20081118/1227000201

添付ファイル1
No.889
08/12 10:29

edit

添付ファイル

正規表現
メール

文字列に「ひらがな(全角)」「漢字(全角)」「カタカナ(全角)」「カタカナ(半角)」が使われているか判別する。

文字列に「ひらがな(全角)」「漢字(全角)」「カタカナ(全角)」が使われているかを判別するには次のようにする

PHP5 + UTF-8の場合

mb_regex_encoding('UTF-8');
if ( preg_match('/[一-龠]+/u', $q)  ){ 漢字を含む時の処理 }
if ( preg_match('/[ァ-ヶー]+/u', $q) ){ カタカナを含む時の処理 }
if ( preg_match('/[ぁ-ん]+/u', $q) ){ ひらがなを含む時の処理 }
if ( preg_match('/[ア-ン゙゚]+/u', $q) ){ 半角カタカナを含む時の処理 }

■ 注意1

正規表現のオプション【 /u 】というのが最後にくっついていますが、

これは文字コード UTF-8 で検索を行うときには必ず必要なものです。

忘れないよう注意!


■ 注意2

また上記の例だと「ー」はひらがなとしてマッチしません。

ひらがなにも「ー」を含ませる場合は

if ( preg_match('/[ー-ん]+/u', $q) ){ ひらがなを含む }



仕方なく mb_ereg で実装する場合は下記の通り

mb_regex_encoding('EUC-JP');

if ( mb_ereg('[一-龠]+', $q) ) { 漢字を含む }


Unicode対応 文字コード表

!JP 付録4 日本語文字一覧

http://jprs.jp/doc/rule/saisoku-1-wideusejp-furoku-4.html


ASCII文字コード一覧表

http://www.psl.ne.jp/perl/pdojo00b.html


memo.xight.org - PHPの文字化け - 5つの誤解と5つの対策

http://memo.xight.org/2007-02-14-1



No.473
11/19 14:06

edit

正規表現
日本語

全角カタカナにマッチする正規表現

全角カタカナにマッチする正規表現

preg_match( '/[ァ-ヶ]+/',$text );

参考:Unicode対応文字コード表

http://ash.jp/code/unitbl21.htm

No.304
08/08 14:22

edit

正規表現
日本語

日本語が入った正規表現で検索、置換を行う

日本語が入った正規表現を使って検索、置換を行うには preg_match , preg_replace を使う

その際文字化けが起こってしまうことが多いが、原因は【/】をエスケープし忘れている

ところにあると思うので、【/】はきちんとエスケープしよう。

1 日本語エンコードを指定する

mb_regex_encoding('UTF-8'); // もしくは SJIS, EUC-JP

2 検索する文字( $find_text )と区切り文字(/)はあらかじめエスケープしておく

$find_text = preg_quote($find_text, '/');

3 正規表現を使って置換を行う

$string=preg_replace("/($find_text)/", "置換する文字列",$string );

これで文字化けもおこらないと思います。

エンコードUTF-8で日本語を使う場合は u オプションを使用します

$string=preg_replace("/($find_text)/u", "置換する文字列",$string );
No.287
02/09 16:10

edit

正規表現
日本語