0

親愛なる/奥様 廃止された ereg_replace を preg_replace または str_replace に置き換えて、以下のコードと同じ機能を維持するにはどうすればよいですか?

return ereg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number);

///this doesnt work

return preg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number);

誰よりも賢い人は手がかりを持っていますか?

4

3 に答える 3

1

すばらしい手動のアプローチを読みます。

PHPマニュアルには、 POSIX正規表現からPCREに移行するためのセクションがあります。

  1. PCRE関数では、パターンが区切り文字で囲まれている必要があります。
  2. POSIXとは異なり、PCRE拡張機能には、大文字と小文字を区別しない照合専用の機能がありません。代わりに、これは/iパターン修飾子を使用してサポートされます。マッチング戦略を変更するために、他のパターン修飾子も使用できます。
  3. POSIX関数は、左端の一致のうち最長のものを検出しますが、PCREは最初の有効な一致で停止します。文字列がまったく一致しない場合は違いはありませんが、一致する場合は、結果の一致と一致速度の両方に劇的な影響を与える可能性があります。この違いを説明するために、JeffreyFriedlによる「MasteringRegularExpressions」の次の例を検討してください。パターンone(self)?(selfsufficient)を使用しますか?文字列をPCREで十分に使用すると、一致する結果になりますが、POSIXを使用すると、完全な文字列を使用すると結果が一致します。両方の(サブ)文字列は元の文字列と一致しますが、POSIXでは最長の文字列が結果である必要があります。

頑張って、
アリン

于 2011-01-21T13:19:18.800 に答える
1

これを試して:

return ereg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number);

になる

return preg_replace("/^(.*)%%number%%(.*)$/","\\1$i\\2",$number);

正規表現の前後の / に注意してください。

于 2011-01-21T13:17:07.290 に答える
0

PHP の preg_ 関数で使用される Perl 互換の正規表現では、パターン文字列に境界文字が必要であり、実際の文字列パターンの開始位置と終了位置、および大文字と小文字を区別しないなどの追加機能の属性がどこにあるかを定義します。

例えば:

$pattern = "/dog/i"; // Search pattern for "dog", case insensitive.
$replace = "cat";

$subject = "Dogs are cats.";

$result = preg_replace($pattern, $replace, $subject);
于 2011-01-21T13:16:07.897 に答える