PHP Regex仅用于整个单词

时间:2011-10-02 10:38:14

标签: php regex

我有以下代码:

function mmh_links($message){
    ini_set('auto_detect_line_endings','1');
    $row = 1;
    if (($handle = fopen(realpath(dirname(__FILE__))."/mmh_replace.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $message = preg_replace("/({$data[0]}(?![^><]*?(?:>|<\/a)))/i","<a href=\"{$data[1]}\" class=\"postlink\">$1</a>",$message,1);
        }
        fclose($handle);
    }

    return $message;    
}

从CSV文件中查找特定关键字,并通过CSV文件中给出的链接将其包围。此外,它确保它只替换每个关键字一次,并确保它不替换已在链接中的关键字,并且它不区分大小写。到目前为止一切都很好。

现在我想限制搜索“整个单词”,这意味着我不希望“test”捕获“xxxtestxxx”。

在保留我之前编写的所有规则的同时,我最好的选择是什么?

1 个答案:

答案 0 :(得分:4)

包含您要与\b运算符匹配的全部字词 - 这表示word boundary

$pattern = "/(\b{$data[0]}\b(?![^><]*?(?:>|<\/a)))/i";
$subject = "<a href=\"{$data[1]}\" class=\"postlink\">$1</a>";
$message = preg_replace($pattern, $subject, $message, 1);