『preg_match』の何たらかんたら

PHPで文字列チェックしたくてちょっと調べた。

こんな感じでOK?みたいなものが以下のコード。

<?php
function chk_alnum($text) { 
  if (preg_match("/^[a-zA-Z0-9]+$/",$text)) { 
    return TRUE; 
  } else { 
    return FALSE; 
  } 
}
?>
いろいろ出てきた情報を整理。


『preg_match』 — 正規表現によるマッチングを行う

ヒント:
ある文字列が他の文字列内に含まれているかどうかを調べるためだけに
preg_match() を使うのは避けた方が良いでしょう。
strpos() か strstr() 関数を 使う方が速くなります。
だってさ。

preg_match("/パターン/", 調べる文字列);

  • "/パターン/"        //文字列の1行目のみを調べる
  • "/パターン/s"   //改行文字を無視し、1行とみなして調べる
  • "/パターン/i"       //文字列の大文字・小文字を区別しない
  • "/パターン/is"      //大文字・小文字を区別せず、1行とみなして調べる

『"/パターン/g"』は「複数行を調べる」という記述を発見したが、これは実際にはエラーになるらしい。
g修飾子を使うためには『preg_match_all』を使わなければならないそうだ。

『preg_match』 は、pattern がマッチした回数を返す。
つまり、0回(マッチせず)または 1回となる。
これは、最初にマッチした時点で『preg_match』は検索を止めるため。
逆に『preg_match_all()』は、subject の終わりまで検索を続けます。
『preg_match』 は、エラーが発生した場合にFALSEを返します。


補足:
PHPのマニュアルでこんなことが書かれていた。
注意: Perl 互換の正規表現構文を使用する preg_match() のほうが、
多くの場合 ereg() よりも速く動作します。

へ~  …で、『PHPのpregは本当にeregより速いのか』で実際に調べていた。
そこでは『ereg_replace』と『preg_replace』で比較していたのだが、結果は『preg』の方が4倍近く高速だったそうな。
逆に『ereg』のメリットは何ぞや?単なる古いものとの互換性のためだけに残してあるものだったりするのだろうか?

また宿題できちゃったよ。

0 Comments:

Recent Posts