preg_replace语法(img src)并保留URL的一部分

时间:2014-08-13 14:55:57

标签: php html regex preg-replace

我正在尝试做与preg_replace syntax (img src)类似的事情,但我不想带走SRC属性中的所有内容。

src="http://www.bob.com/co/02/wp-content/uploads/2014/07/david_hasselhoff_at_the_dome_5.jpg"

我只想替换 http://www0.bob.com/co/02/ 。它可能会有所不同。

所以我要做的是替换图片代码中src="/wp-content/之间的内容。

我该如何解决这个问题?

这是我尝试过的代码:

$content = preg_replace('!(?<=src\=\").+(?=\"(\s|\/\>))!', 'http://alex.com/wp-content/', $content); 

2 个答案:

答案 0 :(得分:1)

你可以使用,

$str = 'src="http://www.bob.com/co/02/wp-content/uploads/2014/07/david_hasselhoff_at_the_dome_5.jpg"'; 

preg_replace("/(src=\")(.*)(\/wp-content)/", "$1http://example.com$3", $str);

哪会回来,

src="http://example.com/wp-content/uploads/2014/07/david_hasselhoff_at_the_dome_5.jpg"

贪婪/非贪婪

关于non-greedy的评论意味着您可以使用(.*)而不是(.*?)。你让它变得非贪婪的原因是(.*)尽可能匹配的事实,例如你的字符串包含两个图像链接:

$str = '<img src="http://www.bob.com/co/02/wp-content/uploads/2014/07/david_hasselhoff_at_the_dome_5.jpg" /> <img src="http://www.bob.com/co/02/wp-content/uploads/2014/07/david_hasselhoff_at_the_dome_5.jpg" />'; 

然后正则表达式中的(.*)将匹配第一个&#34; http://...&#34;一直到第二个&#34; / wp-content&#34;,

print_r(preg_replace("/(src=\")(.*)(\/wp-content)/", "$1http://example.com$3", $str));
                                ^^

然后返回<img src="http://example.com/wp-content/uploads/2014/07/david_hasselhoff_at_the_dome_5.jpg" />

使用非贪婪的捕获将产生此结果,

print_r(preg_replace("/(src=\")(.*?)(\/wp-content)/", "$1http://example.com$3", $str));
                                ^^^ 
<img src="http://example.com/wp-content/uploads/2014/07/david_hasselhoff_at_the_dome_5.jpg" /> <img src="http://example.com/wp-content/uploads/2014/07/david_hasselhoff_at_the_dome_5.jpg" />

答案 1 :(得分:1)

您可以使用此正则表达式获取内容,直到wp-content:

src="(.*)\/wp-content

<强> Working demo

enter image description here

匹配信息

MATCH 1
1.  [5-29]  `http://www.bob.com/co/02`
MATCH 2
1.  [98-113]    `http://alex.com`