いつ削除されるかはわかりませんereg
が、私の賭けは PHP 6.0 の時点です。
ereg
2 番目の問題 (に変換preg
) については、それほど難しいことではないようです。アプリケーションの行数が 100 万行を超える場合、誰かにこの仕事をせいぜい 1 週間実行させるだけのリソースが必要です。コード内のすべてのインスタンスを grep しereg_
、お気に入りの IDE でいくつかのマクロをセットアップします (区切り文字、修飾子などの追加などの単純なもの)。
1768 の正規表現のほとんどは、マクロを使用して移植できるに違いありません。
ereg
別のオプションとして、関数が使用できない場合は関数の周りにラッパーを記述し、必要に応じて変更を実装することもできます。
if (function_exists('ereg') !== true)
{
function ereg($pattern, $string, &$regs)
{
return preg_match('~' . addcslashes($pattern, '~') . '~', $string, $regs);
}
}
if (function_exists('eregi') !== true)
{
function eregi($pattern, $string, &$regs)
{
return preg_match('~' . addcslashes($pattern, '~') . '~i', $string, $regs);
}
}
あなたはアイデアを得る。また、PEAR パッケージの PHP Compatも実行可能なソリューションになる可能性があります。
POSIX 正規表現との違い
PHP 5.3.0 の時点で、POSIX Regex 拡張は非推奨になりました。POSIX 正規表現と PCRE 正規表現には多くの違いがあります。このページでは、PCRE に変換する際に知っておく必要がある最も注目すべきものをリストします。
- PCRE 関数では、パターンを区切り文字で囲む必要があります。
- POSIX とは異なり、PCRE 拡張機能には大文字と小文字を区別しない一致専用の関数はありません。代わりに、これは /i パターン修飾子を使用してサポートされています。マッチング戦略を変更するために、他のパターン修飾子も利用できます。
- POSIX 関数は左端の一致のうち最長のものを見つけますが、PCRE は最初の有効な一致で停止します。文字列がまったく一致しない場合は違いはありませんが、一致する場合は、結果の一致と一致速度の両方に劇的な影響を与える可能性があります。この違いを説明するために、Jeffrey Friedl による「Mastering Regular Expressions」の次の例を検討してください。パターン one(self)?(selfsufficient)? の使用 文字列 oneselfsufficient に対して PCRE を使用すると一致する oneself になりますが、POSIX を使用すると結果は完全な文字列 oneselfsufficient になります。両方の (サブ) 文字列は元の文字列と一致しますが、POSIX では最長のものを結果にする必要があります。