47041


**mb_ereg_replaceは、[正規表現](http://php.net/manual/ja/refs.basic.text.php)のページに掲載されていなくて、[マルチバイト文字列](http://php.net/manual/ja/book.mbstring.php)に掲載されているのですが、正規表現としてはどういう位置付けになるのですか？**  
・PCRE でもなく、POSIXでもない？？

* * *

**preg_replaceの方がmb_ereg_replaceより良い点はありますか？**  
・どういう風に使い分けるのですか？


CC BY-SA 4.0
2018-07-27T16:18:51.597
47037
2018-07-27T21:27:47.450
7886
question
php 正規表現
mb_ereg_replaceについて


_**・PCRE でもなく、POSIXでもない？？**_

ネーミングだけから言えば、昔のPHP用のPOSIX拡張系正規表現の`ereg_replace`のマルチバイト対応版です。ただし、通常の正規表現の実装でPOSIX拡張正規表現として規定されていることしかできないということはまずありませんので、「POSIXでない」なんて判定できるのかどうかはわかりません。「PCREでない」のは間違いないです。

_**・どういう風に使い分けるのですか？**_

特に使い分ける必要はなく、「日本語扱うんなら`mb_`系の方が良いんじゃね?」的に決められても問題はないと思います。要件的に「使えない」場合を外した後、お好きな方を使えば良いでしょう。

  * PCREはコアモジュールなのでPHPが使えるなら必ず使える

環境によっては`mb_ereg_replace`を含むmbstring拡張モジュールは有効になっていないかもしれません。環境設定を自分でいじれないなら、PCREを使わざるを得ないかもしれません。

  * PCREはUTF-8以外のマルチバイトエンコーディングは扱えない

別項に書いたように、UTF-8がメモリの中でどんなバイト列になっているか把握していて、その上でそのバイト列に対しての操作を行うので無い限り、PCREはUTF-8以外には使えません。


CC BY-SA 4.0
2018-07-27T21:27:47.450
47041
2018-07-27T21:27:47.450
2020-06-17T08:14:45.997
-1
13972
47037
answer