当我尝试用标题替换标签时,为什么preg_replace返回NULL?

时间:2018-08-23 12:58:57

标签: php preg-replace

我试图仅用文本替换链接并重新保存内容,但前提是满足以下要求。但是,当我使用preg_replace函数时,即使我能够使用NULL用文本替换链接,它也会返回array_replace($fullLinks,$linksRemoved)

我删除了array_replace,因为我不知道如何将新数组放回内容中。

我已经遍历了所有其他“ preg_replace返回NULL”的帖子,但是找不到适合我的解决方案。在搜索模式时,我认为“你好,我是标题”也是一个模式,还是我要去哪里错了?

$post_id = 122232;
$content_post = get_post($post_id);
$content = $content_post->post_content;
$linksRemoved[] = array();
$FullLinks[] = array();

// preg_match_all('/<a.*href=\"(.*)\".*><\/a>/isU', $content, $matches);
// above only returns 11 links
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $content, $matches)) {
    $avoidImages  = array('.jpg', '.png', '.gif', '.jpeg', 'glossary');
    foreach ($matches[0] as $match){
        if($match == str_replace($avoidImages, '', $match)){
            if (strpos($match, 'bush.com') == true || strpos(match, 'articles') == true){

                $fullLinks[] = array('match' => $match );
                $linksRemoved[] = array('links' => strip_tags($match) );




            }
        }
    }
}
$linksRemoved = array_filter($linksRemoved);
$content = preg_replace($fullLinks, $linksRemoved, $content);
echo '<pre>';
var_dump($content);
echo '</pre>';

我已经尝试使用DOMDocument,但是一直卡在replaceChild甚至跳过了以下元素的地方:PHP DOMDocument skips even elements

下面的

$linksRemoved数组示例: $fullLinks数组是相同的,但是单词是超链接的,因此它包含标记。

 [0]=>
  array(1) {
    ["match"]=>
    string(114) "gluteus medius"
  }
  [1]=>
  array(1) {
    ["match"]=>
    string(174) "gluteal complex"
  }
  [2]=>
  array(1) {
    ["match"]=>
    string(130) "rectus abdominis"
  }

1 个答案:

答案 0 :(得分:1)

AFAIK preg_replace不适用于多级数组,请更改这两行

$fullLinks[] = array('match' => $match );
$linksRemoved[] = array('links' => strip_tags($match) );

进入

$fullLinks[] = $match;
$linksRemoved[] = strip_tags($match);