匹配字符串内的UTF-8短语与preg_match()

时间:2012-06-20 17:49:51

标签: php regex preg-match

我想把字符串中的一些短语作为单词匹配(stristr不起作用,因为我不想要包含“单词”的结果)

我使用此代码:

function striword($string, $word) {
    return preg_match("/(?:[[:space:]]|^)" . $word . "(?:[^\w]|$)/i", $string);
}

但是当我尝试匹配像“这是一个字符串”这样的字符串时,它不能按预期工作:(

示例:

//Phrase to match: "soda and beer"

striword($string, "soda and beer");

String 1: "I like soda and beer" MATCH: TRUE
String 2: "I like soda and beerbum" MATCH: FALSE
String 3: "I like soda and beer, it's nice!" MATCH: TRUE

1 个答案:

答案 0 :(得分:2)

两个选项:

使用单词边界锚点(如果你处理的是实际的字母数字单词,则非常有用):

preg_match("/\b" . $word . "\b/i", $string);

或使用空格作为分隔符:

preg_match("/(?:^|\s)" . $word . "(?:\s|$)/i", $string);

如果您正在使用Unicode字符串并希望匹配Unicode字词,请不要忘记/u修饰符。