我正在尝试在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);
}
}
答案 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
等引用捕获组。