我想用锚标记替换可用字符串中的一些单词。但它给我带来了麻烦。我在做如下:
$post['Post']['comment'] = 'a class href';
$post['Post']['person'] = 'a';
$post['Post']['place'] = 'class';
$post['Post']['thing'] = 'href';
$thing = "<a class='searchName' href='javascript:void(0)'>".ucfirst($post['Post']['thing'])."</a>";
$person = "<a class='searchName' href='javascript:void(0)'>".ucfirst($post['Post']['person'])."</a>";
$place = "<a class='searchName' href='javascript:void(0)'>".ucfirst($post['Post']['place'])."</a>";
$search_strings = array($person=>$post['Post']['person'],$place=>$post['Post']['place'],$thing=>$post['Post']['thing']);
$kw_to_search_for = $post['Post']['comment'];
foreach($search_strings as $key=>$v)
{
if (preg_match('~\b' . $v . '\b~i', $kw_to_search_for, $m))
{
$as[] = str_ireplace($v, $key, $kw_to_search_for);
}
}
上述代码的输出是:
Array
(
[0] => **A** cl**A**ss href
[1] => a **Class** href
[2] => a class **Href**
)
但我不想要像上面这样的输出。根据我的要求,输出应如下所示:
Array
(
[0] => **A** class href
[1] => a **Class** href
[2] => a class **Href**
)
请建议asap .......
答案 0 :(得分:0)
如果您使用评论中的空格进行搜索,以分隔它将起作用的单词。
foreach ($search_strings as $key=>$v)
{
//space at the beginning?
$a = preg_replace('/\s' . $v . '/i', " $key ", $kw_to_search_for);
//space at the end?
$b = preg_replace('/' . $v . '\s/i', " $key ", $kw_to_search_for);
//if anything replaced, use it
if ($a !== $kw_to_search_for)
{
$as[] = $a;
}
elseif ($b !== $kw_to_search_for)
{
$as[] = $b;
}
}
输出有一些额外的空格,但HTML应该忽略那么好......
Array
(
[0] => <a class='searchName' href='javascript:void(0)'>A</a> class href
[1] => a <a class='searchName' href='javascript:void(0)'>Class</a> href
[2] => a class <a class='searchName' href='javascript:void(0)'>Href</a>
)