在php中找到与单词完全匹配的内容?

时间:2013-03-25 05:26:13

标签: php regex match cakephp-2.1

我想用锚标记替换可用字符串中的一些单词。但它给我带来了麻烦。我在做如下:

$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 .......

1 个答案:

答案 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>
)