如何使用preg_replace_callback代替preg_replace用链接html替换单词?

时间:2019-04-21 07:12:50

标签: php

我正在尝试在preg_replace()的if语句中使用preg_match()。直到我发现preg_replace被描述,应该将其替换为preg_replace_callback时,它才能正常工作。因此,我更换了它,但是幸运的是它不起作用,请得到您的帮助,以了解在我的情况下应如何使用它。我在这里阅读了关于stackoverflow和其他地方的其他问题,但没有一个与我的情况类似

// The Regular Expression filter
$reg_exUrl1 = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

// Check if there is a url in the text
if(preg_match($reg_exUrl1, $discussion_text_with_links, $url1)) {
    // make the urls hyper links
    //$replaceWith = "<a href=".$url1[0]." class='hashtag_link' target='_blank'>".$url1[0]."</a> ";
    $discussion_text_with_links = preg_replace_callback($reg_exUrl1, function($url1) {echo "<a href=".$url1[0]." class='hashtag_link' target='_blank'>".$url1[0]."</a> ";}, $discussion_text_with_links);

} else {
    // The Regular Expression filter
    $reg_exUrl2 = "/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

    // Check if there is a url in the text
    if(preg_match($reg_exUrl2, $discussion_text_with_links, $url1)) {
        // make the urls hyper links
        //$replaceWith = "<a href=".$url1[0]." class='hashtag_link' target='_blank'>".$url1[0]."</a> ";
        $discussion_text_with_links = preg_replace_callback($reg_exUrl2, function($url1) {echo "<a href=".$url1[0]." class='hashtag_link' target='_blank'>".$url1[0]."</a> ";}, $discussion_text_with_links);

    }
}

1 个答案:

答案 0 :(得分:1)

您不需要preg_replace_callback()。只需在$0的替换字符串中使用preg_replace(),它将用与正则表达式匹配的字符串替换。

$discussion_text_with_links = preg_replace(
    $reg_exUrl1, 
    "<a href='$0' class='hashtag_link' target='_blank'>$0</a>", 
    $discussion_text_with_links);

您还可以使用$1$2等引用捕获组。