我想替换内容的图片alt标签。所以我使用了preg_replace
add_filter('the_content', 'click_to_expand_gallery');
function click_to_expand_gallery($content) {
$pattern ='~<a(.*?)href=(.*?)><img(.*?)alt="(.*?)"></a>~i';
$replacement = '<a$1href=$2><img$3alt="Game"></a>';
$content = preg_replace($pattern, $replacement, $content);
}
它工作正常,但问题是,如果已经有数据,此代码正在替换alt标记。
有人可以指导我如何检查alt标签是否为空白,然后根据它替换其数据。
答案 0 :(得分:2)
当alt为空值时,仅匹配fullstring。捕获保持不变的两个部分并将它们放在默认值的任意一侧&#34; Game&#34;在- src
- app
- assets
image.jpg
:
方法(Demo):
$replacement
输入/输出:
$pattern ='~(<a.*? href=[^>]*><img.*? alt=")("[^>]*></a>)~i';
$replacement = '$1Game$2';
$content = preg_replace($pattern, $replacement, $content);
echo $content;
现在,这实际上将$content='<a href="something.com"><img src="blah.jpg" alt=""></a>';
// output: <a href="something.com"><img src="blah.jpg" alt="Game"></a>
$content='<a href="something.com"><img src="blah.jpg" alt="Not Empty"></a>';
// output: <a href="something.com"><img src="blah.jpg" alt="Not Empty"></a>
标记与href属性匹配,并且可能还包含零个或多个其他属性,其中包含必须具有空<a>
属性的<img>
标记,可能有零个或多个其他属性。
如果您不关心检查alt
标记是否嵌套在锚标记中,则可以将正则表达式模式缩小为仅匹配<img>
部分。