0

尊敬的先生/女士,我怎样才能用 preg_replace 或 str_replace 替换已弃用的 ereg_replace 并且仍然具有与下面代码中相同的功能?

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

///this doesnt work

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

有哪位聪明的知道吗?

4

3 回答 3

1

试试这个:

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

变成

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

注意正则表达式周围的 /。

于 2011-01-21T13:17:07.290 回答
1

我将阅读神话般的手动方法。

PHP 手册有一节用于从 POSIX Regex 迁移到 PCRE。

  1. PCRE 函数要求模式用分隔符括起来。
  2. 与 POSIX 不同,PCRE 扩展没有用于不区分大小写匹配的专用函数。相反,这是使用 /i 模式修饰符来支持的。其他模式修饰符也可用于更改匹配策略。
  3. POSIX 函数查找最左边的最长匹配,但 PCRE 在第一个有效匹配处停止。如果字符串根本不匹配,则没有区别,但如果匹配,则可能会对结果匹配和匹配速度产生巨大影响。为了说明这种差异,请考虑以下来自 Jeffrey Friedl 的“掌握正则表达式”的示例。使用模式 one(self)?(selfsufficient)? 在字符串 oneselfsufficient 上使用 PCRE 将导致匹配自己,但使用 POSIX 结果将是完整的字符串 oneselfsufficient。两个(子)字符串都与原始字符串匹配,但 POSIX 要求最长的是结果。

祝你好运,
阿林

于 2011-01-21T13:19:18.800 回答
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 回答