それどころか。人々は正規表現を邪悪なミームのように頻繁にIMOしている。preg_matchがで過度に使用されphp
ていることは明らかですが、(PHPで)そうするのが賢明であることが多いことはそれほど明白ではありません。
私はこれまでのところ、文字列関数を使用することはPHPランドのさらに別のマイクロ最適化であると推測します。多くの有用なものがあり、通常はより良い選択です。しかし、あなたは避けるべきではありませんpreg_match
複数の賛成でstrpos
かつif
チェーン。実際には判明しているため、libpcreは多くの場合、PHPが文字列の代替を探すループを実行するよりも高速です。
最近の例で気づいたように、文字列がすべて小文字であるかどうかをテストします。
if ($string == strtolower($string))
より読みやすい:
if (!preg_match("/[A-Z]/", $string))
そして、あなたは、それがすべてPHPであるので、最初のものがより速くなければならないと仮定するでしょう。しかし実際には、正規表現は文字列を1回だけ参照し、大文字が見つかるとすぐに否定条件を中止できます。ただし、strtolower()アプローチは文字列を2回調べます。最初のstrtolower()は、各文字を繰り返し、比較して大文字にすることにより、文字列を複製します。次に、==
オリジナルとコピーを繰り返し、もう一度それらを比較します。
したがって、それは明らかなケースではありません。また、客観的になるために、通常は短い文字列を比較するだけなので、最初の方が速いことがよくあります。しかし、PHPの文字列関数は常に正規表現よりも賢明であるという仮定に盲目的に進まないことが不可欠です。
(xhtml- regexesに関する@bobinceの楽しい答えと、それが最近非常に役に立たない方法でリンクされることが多い方法について、別の不満を追加したいと思います。そして、以下のより客観的な答えは無視されます。)