サンプルコード。
<?php
$list = [
'12345',
'1+2=3',
'123abc',
'abc123',
'12345',
];
foreach($list as $x){
$m1 = preg_match('/^[0-9]+/', $x);
$m2 = mb_ereg_match('^[0-9]+', $x);
$m3 = mb_ereg_match('^[0-9]+$', $x);
$m4 = mb_ereg_match('^[0-90-9]+', $x);
echo "\n";
echo "preg_match('/^[0-9]+/', '$x') => [$m1] \n";
echo "mb_ereg_match('^[0-9]+', '$x') => [$m2] \n";
echo "mb_ereg_match('^[0-9]+$', '$x') => [$m3] \n";
echo "mb_ereg_match('^[0-90-9]+', '$x') => [$m4] \n";
}
?>
実行結果。
$ php ./regex.php
preg_match('/^[0-9]+/', '12345') => [1]
mb_ereg_match('^[0-9]+', '12345') => [1]
mb_ereg_match('^[0-9]+$', '12345') => [1]
mb_ereg_match('^[0-90-9]+', '12345') => [1]
preg_match('/^[0-9]+/', '1+2=3') => [1]
mb_ereg_match('^[0-9]+', '1+2=3') => [1]
mb_ereg_match('^[0-9]+$', '1+2=3') => []
mb_ereg_match('^[0-90-9]+', '1+2=3') => [1]
preg_match('/^[0-9]+/', '123abc') => [1]
mb_ereg_match('^[0-9]+', '123abc') => [1]
mb_ereg_match('^[0-9]+$', '123abc') => []
mb_ereg_match('^[0-90-9]+', '123abc') => [1]
preg_match('/^[0-9]+/', 'abc123') => [0]
mb_ereg_match('^[0-9]+', 'abc123') => []
mb_ereg_match('^[0-9]+$', 'abc123') => []
mb_ereg_match('^[0-90-9]+', 'abc123') => []
preg_match('/^[0-9]+/', '12345') => [0]
mb_ereg_match('^[0-9]+', '12345') => []
mb_ereg_match('^[0-9]+$', '12345') => []
mb_ereg_match('^[0-90-9]+', '12345') => [1]
PHPのドキュメントによると、
この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される値を返す可能性もあります。
とのこと。
preg_match と mb_ereg_match の両方ともそんな感じ。
だから空文字列 (=FLASEとして扱われる) が返ってくることがあるのか。
今回ためした環境は Mac OS X Mavericks + PHP 5.4
$ uname -mrsv
Darwin 13.2.0 Darwin Kernel Version 13.2.0: Thu Apr 17 23:03:13 PDT 2014; root:xnu-2422.100.13~1/RELEASE_X86_64 x86_64
$ php --version
PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
参考資料。
preg_match — 正規表現によるマッチングを行う
説明
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
pattern で指定した正規表現により subject を検索します。
PHP: preg_match - Manual
mb_ereg_match — マルチバイト文字列が正規表現に一致するか調べる
説明
bool mb_ereg_match ( string $pattern , string $string [, string $option = "msr" ] )
マルチバイト文字列に対する正規表現マッチングを行います。
PHP: mb_ereg_match - Manual
tags: php
Posted by NI-Lab. (@nilab)