2012-06-20 42 views
0

我正在triyin爲一個字符串內部的一些短語匹配的單詞(stristr不起作用東陽我不想包含「字」的結果)匹配UTF-8內部字符串的preg_match()語句

我用這個代碼:

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 
+0

爲什麼在一個地方使用'[[:space:]]'而在另一個地方使用'[^ ​​\ w]'? –

回答

2

兩個選項:

使用字邊界錨(如果你有實際的,字母詞處理有用):

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

或者使用空格作爲分隔符:

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

如果您'使用Unicode字符串並且想要匹配Unicode字,請不要忘記/u修飾符。

+0

我正在處理字母數字字,但它們可以包含空格,超字母,utf字符... – LDK

+0

它們不是字母數字。 (+1爲完美答案) – cmbuckley