我有一些代码正在运行,它找出字符串中的主题标签并将它们转换为链接。我已经使用preg_match_all
如下所示完成了此操作:
if(preg_match_all('/(#[A-z_]\w+)/', $postLong, $arrHashTags) > 0){
foreach ($arrHashTags[1] as $strHashTag) {
$long = str_replace($strHashTag, '<a href="#" class="hashLinks">'.$strHashTag.'</a>', $postLong);
}
}
此外,对于我的搜索脚本,我需要在结果字符串中将搜索到的关键字加粗。类似于下面的代码使用preg_replace
:
$string = "This is description for Search Demo";
$searchingFor = "/" . $searchQuery . "/i";
$replacePattern = "<b>$0<\/b>";
preg_replace($searchingFor, $replacePattern, $string);
我遇到的问题是两者必须一起工作,并且应该作为一个组合结果抛出。我能想到的一种方法是preg_match_all
使用preg_replace
代码运行生成的字符串,但是如果标签和搜索的字符串相同怎么办?第二个块也会加粗我的标签,这是不需要的。
根据下面给出的答案更新我正在运行的代码,但它仍然不起作用
if(preg_match_all('/(#[A-z_]\w+)/', $postLong, $arrHashTags) > 0){
foreach ($arrHashTags[1] as $strHashTag) {
$postLong = str_replace($strHashTag, '<a href="#" class="hashLinks">'.$strHashTag.'</a>', $postLong);
}
}
紧接着,我运行这个
$searchingFor = "/\b.?(?<!#)" . $keystring . "\b/i";
$replacePattern = "<b>$0<\/b>";
preg_replace($searchingFor, $replacePattern, $postLong);
只是让你知道,这一切都在一个while
循环中,它正在生成列表