我正在尝试做与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);
答案 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 强>
匹配信息
MATCH 1
1. [5-29] `http://www.bob.com/co/02`
MATCH 2
1. [98-113] `http://alex.com`