我很确定这是我的一些愚蠢错误,但我无法调试错误的位置。
我正在尝试使用此正则表达式更改html文件中的图像路径。 它应该可以工作,但是preg_replace只是一次又一次地返回null。
preg_replace("(src=){1}([\"']){1}(.*)([\/]+)(.*[\"']{1})", '/my/path'.$5 , $source);
有人愿意伸出援助之手吗?
答案 0 :(得分:6)
这里有很多事情发生。
/(src=){1}/
与/src=/
.*
可能没有按照你的意愿行事,因为它匹配一个空白字符串(并设置为贪婪)$5
连接到一个字符串,但不会在PHP中设置$ 5;你可能的意思是'/ my / path $ 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);