downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

PCRE 正規表現構文> <Perl とは異なる点
[edit] Last updated: Fri, 25 May 2012

view this page in

POSIX 正規表現との違い

PHP 5.3.0 以降、POSIX 正規表現 拡張モジュールは非推奨となりました。POSIX の正規表現と PCRE の正規表現にはさまざまな違いがあります。 このページでは、PCRE への移行の際に知っておくべきもっとも重要な違いをまとめます。

  1. PCRE 関数では、パターンを デリミタ で囲まなければなりません。
  2. POSIX とは異なり、PCRE 拡張モジュールには大文字小文字を区別しないマッチング専用の関数がありません。 同等の機能は、i (PCRE_CASELESS) パターン修飾子 でサポートしています。それ以外にもパターン修飾子がいくつかあり、 マッチングの振る舞いを変えることができます。
  3. POSIX 関数は、いちばん左側にある最も長くマッチするパターンを探します。 しかし PCRE は、マッチするパターンが最初に見つかった時点で処理を終えます。 マッチするパターンがまったくない文字列の場合は何も相違はありませんが、 マッチするパターンがある場合は結果や処理速度に大きな影響が出る可能性があります。 この違いを説明するために、Jeffrey Friedl の "Mastering Regular Expressions (「詳説 正規表現」)" にある以下の例を考えてみましょう。 PCRE でパターン one(self)?(selfsufficient)? を文字列 oneselfsufficient に適用すると oneself にマッチしますが、 POSIX の場合は文字列全体 oneselfsufficient にマッチします。 どちらの結果も元の文字列にマッチしますが、POSIX の場合はもっとも長いものを結果とするのです。

関数の置き換え
POSIX PCRE
ereg_replace() preg_replace()
ereg() preg_match()
eregi_replace() preg_replace()
eregi() preg_match()
split() preg_split()
spliti() preg_split()
sql_regcase() No equivalent



add a note add a note User Contributed Notes POSIX 正規表現との違い
jasen at treshna dot com 26-Oct-2011 09:11
there are several other differences

including different meaning for the symbols  ( [
different rules for which symbols need escaping (they can't be the same as both standard posix and extended posix)

you should read the full documentation for PCRE before chaging any posix regex to use pcre.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites