您好我希望有人可以帮我解决我遇到的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)还需要替换匹配的所有出现(页面上可能有多个图像)。
非常感谢您的帮助!
答案 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);