PHP- preg_replace错误例子

作者:半瓶墨水   链接:http://www.2maomao.com/blog/php-preg_replace-sample/

看preg_replace的时候感觉有点儿模糊,上网查例子,许多个网站提到同一个例子:

<?php
$
patterns = array("/(19|20\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
$
replace = array("\\3/\\4/\\1", "$\\1 =");
print preg_replace($patterns, $replace, "{startDate} = 1969-6-19");
?>

百思不得其解,为啥是\\3\\4而不是\\2\\3,后来实践了一把,发现不对。
应该是这样(注意Pattern中19|20两边的括号):

<?php
$
patterns = array("/((19|20)\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
$
replace = array("\\3/\\4/\\1", "$\\1 =");
print preg_replace($patterns, $replace, "{startDate} = 1969-6-19");
?>

参照http://cn.php.net/preg_replace上面的定义:

n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。

这个例子迷惑人的地方还在于两个19的出现,改成1969-6-23会好一些。

错误例子害死人,记得当年MSDN上面就有许多,ListBox的DeleteString好像就是错的,删除越界了。

两个教训:
1. 文档、例子都会有出错的可能,不要总是假设自己是错的
2. 直接去专业网站查比去搜索引擎要准确(php.net是学习php的好地方)

Tags:[tag]php, preg_replace, 例子[/tag]

2 条评论 发表在“PHP- preg_replace错误例子”上

  1. 宇博说道:

    :q 不过我发现都是两端替换的,也就是整个文章实质上只替换了一次…

  2. 闲云野鹤说道:

    嗯,不错,学习了。~

留下回复