php preg_replace返回null

时间:2010-04-07 12:32:58

标签: php regex

我很确定这是我的一些愚蠢错误,但我无法调试错误的位置。

我正在尝试使用此正则表达式更改html文件中的图像路径。 它应该可以工作,但是preg_replace只是一次又一次地返回null。

preg_replace("(src=){1}([\"']){1}(.*)([\/]+)(.*[\"']{1})", '/my/path'.$5 , $source);

有人愿意伸出援助之手吗?

3 个答案:

答案 0 :(得分:6)

这里有很多事情发生。

  1. /(src=){1}//src=/
  2. 相同
  3. .*可能没有按照你的意愿行事,因为它匹配一个空白字符串(并设置为贪婪)
  4. 您将$5连接到一个字符串,但不会在PHP中设置$ 5;你可能的意思是'/ my / path $ 5'
  5. 但实际上,如果您尝试从HTML(或XML)标记中提取src属性,则应该使用DOM。请参阅this comment

答案 1 :(得分:3)

在遇到这样的错误后,你应该看一下preg_last_error()。

此处提供了更多信息:http://www.pelagodesign.com/blog/2008/01/25/wtf-preg_replace-returns-null/http://www.php.net/preg_last_error

答案 2 :(得分:1)

你的模式有很多不必要的并发症,试试这个:

preg_replace('#src=[\'"](.*?)[\'"]#", '/my/path$1', $source);

如果你知道你只会看到双引号,那就更整洁:

preg_replace('#src="(.*?)"#", '/my/path$1', $source);

<击>

修改

阅读你的评论也许你想要这个?

preg_replace('#(<img\s*.*src=")#', '$1/my/path/', $source);