preg_replace捕获Image标签内部

时间:2014-02-12 15:41:27

标签: regex html-parsing preg-replace

您好我希望有人可以帮我解决我遇到的preg_replace问题

我有以下preg_replace("/(\/[^\/]*.jpg)/", ".jpg", $input_lines);

我的想法是将我的wordpress网站中的图像替换为原始名称...该文件已存在于非缓存文件夹中,因此我无需担心该部分......

<img src="http://url.com/wp-content/uploads/cache/2014/02/flag/278439615.jpg">

我有一个替换版,负责处理网址中的cache,因此我留下了这样的网址:

<img src="http://url.com/wp-content/uploads/2014/02/flag/278439615.jpg">

现在,下一步是从网址中删除number.jpg,数字可以是字母或数字。

所有网址中的常量是/的最后一次出现以及.jpg照顾的preg_replace("/(\/[^\/]*.jpg)/", ".jpg", $input_lines);

然而问题是preg_replace需要在图像标记中查找标记而不是替换图像标记中没有的任何代码......

如何添加到正则表达式(preg_replace)以仅查找替换的图像标记内部?

理想的最终结果是一个如下所示的网址:

<img src="http://url.com/wp-content/uploads/2014/02/flag.jpg">

正则表达式(preg_replace)还需要替换匹配的所有出现(页面上可能有多个图像)。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用此替代品:

$pattern = <<<'EOD'
~
<img \s
(?> [^>s]++ | \Bs | s(?!rc\s*=) )* # possible content before the src attribute 
src \s* = \s* ["']? [^"\'\s>]+?    # start of the src attribute (until /cache/)
\K                                 # reset all from match result
/cache(?=/)
([^\s"'>]*?)                       # capture the path before the filename
/[^\s/]+ (?=\.jpg [>"'\s])         # the filename followed by the .jpg extension
~ix
EOD;
$result = preg_replace($pattern, '$1', $input_lines);