从使用preg_replace创建的变量中删除字符

时间:2014-05-01 23:25:21

标签: php regex wordpress html-parsing preg-replace

所以我试图在我从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;似乎不想被操纵。

1 个答案:

答案 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结构发生更改,将来很难维护此正则表达式。