开发者

PHP Regex for whole words only

开发者 https://www.devze.com 2023-04-09 18:25 出处:网络
I have the following code: function mmh_links($message){ ini_set(\'auto_detect_line_endings\',\'1\'); $row = 1;

I have the following code:

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);
        }
 开发者_JS百科       fclose($handle);
    }

    return $message;    
}

Which looks for specific keywords from a CSV file and surround them by a link given in the CSV file as well. Additionally, it makes sure it only replaces each keyword only once, and makes sure it doesn't replace keywords that are already within links, and it is case insensitive. All good so far.

Now I want to limit to search to "whole words", meaning I don't want "test" to catch "xxxtestxxx".

What's my best option to do this, while keeping all the rules I wrote before?


Wrap the whole words you'd like to match with the \b operator - this indicates a 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);
0

精彩评论

暂无评论...
验证码 换一张
取 消