【发布时间】:2013-04-25 12:53:23
【问题描述】:
我正在运行一些代码,它可以找出字符串中的主题标签并将它们转换为链接。我已经使用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_replace 代码从preg_match_all 运行结果字符串,但是如果标签和搜索的字符串相同怎么办?第二个块也会加粗我的标签,这是不需要的。
更新根据下面给出的答案我正在运行的代码,但它仍然不起作用
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 循环中进行,该循环正在生成列表
【问题讨论】:
-
谁能提出一些建议/
-
你能发布完整的while循环吗?
标签: php preg-replace preg-match-all