所以我试图在我从preg_replace函数获取的URL末尾删除几个字符。然而,它似乎并没有起作用。我不熟悉在preg_replace中使用这些变量(这只是我发现的#34;主要是"工作)。
这是我的尝试:
function addlink_replace($string) {
$pattern = '/<ul(.*?)class="slides"(.*?)<img(.*?)src="(.*?)"(.*?)>(.*?)<\/ul>/is';
$URL = substr($4, 0, -8);;
$replacement = '<ul$1class="slides"$2<a rel=\'shadowbox\' href="'.$URL.'"><img$3src="$4"$5></a>$6</ul>';
return preg_replace($pattern, $replacement, $string);
}
add_filter('the_content', 'addlink_replace', 9999);
基本上我需要删除我的.jpg文件名的最后一位,所以我可以显示LARGE图像而不是它生成的THUMBNAIL,但是&#34; $ 4&#34;似乎不想被操纵。
答案 0 :(得分:1)
此答案基于您希望使用other question的HTML结构在此问题中完成的操作。您问题中发布的正则表达式与第一组<li>
和<img>
标记以及you've indicated所需的任何内容都不匹配,您需要匹配所有<li>
和{ <img>
内的{1}}标签,因此我写了一个更大的功能来执行此操作。
它会将<ul>
内<img>
内的所有<li>
标记包含在<ul>
的{{1}}类中,其中slides
的来源为<a>
移除了-110x110
字符串的图片网址,同时保留了<img>
标记中的缩略图来源。
function addlink_replace($string) {
$new_ul_block = '';
$ul_pattern = '/<ul(.*?)class="slides"(.*?)>(.*?)<\/ul>/is';
$img_pattern = '/<li(.*?)>(.*?)<img(.*?)src="(.*?)"(.*?)>(.*?)<\/li>/is';
preg_match($ul_pattern, $string, $ul_matches);
if (!empty($ul_matches[3]))
{
preg_match_all($img_pattern, $ul_matches[3], $img_matches);
if (!empty($img_matches[0]))
{
$new_ul_block .= "<ul{$ul_matches[1]}class=\"slides\"{$ul_matches[2]}>";
foreach ($img_matches[0] as $id => $img)
{
$new_img = str_replace('-110x110', '', $img_matches[4][$id]);
$new_ul_block .= "<li{$img_matches[1][$id]}>{$img_matches[2][$id]}<a href=\"{$new_img}\">";
$new_ul_block .= "<img{$img_matches[3][$id]}src=\"{$img_matches[4][$id]}\"{$img_matches[5][$id]}></a>{$img_matches[6][$id]}</li>";
}
$new_ul_block .= "</ul>";
}
}
if (!empty($new_ul_block))
{
$replace_pattern = '/<ul.*?class="slides".*?>.*?<\/ul>/is';
return preg_replace($replace_pattern, $new_ul_block, $string);
}
else
{
return $string;
}
}
<a>
的{{1}}属性与图片所具有的更改是专门在线上完成的
href
如果您想修改它。如果您需要从网址中删除$new_img = str_replace('-110x110', '', $img_matches[2][$id]);
以外的任何内容,则可能需要将其从-110x110
更改为str_replace
,或者如果您要从结尾删除特定数量的字符对于URL,您可以使用preg_replace
:
substr
其中$new_img = substr($img_matches[2][$id], 0, -12);
是您想要从字符串末尾删除的字符数(它是负数,因为它从结尾处开始)。
我发布了此功能here的一个实际示例。
您可能需要考虑修改生成此代码块的内容的来源,而不是使用此正则表达式,因为如果HTML结构发生更改,将来很难维护此正则表达式。