許多開發者習慣用 [\x7f-\xff]+ 匹配中文,但這會誤匹配歐洲擴展字符。正確做法是使用 Unicode 碼點範圍,並加上 u 修飾符啟用 UTF-8 模式。
preg_match('~[\x7f-\xff]+~is', $string, $matches);
preg_match('~[\x{4e00}-\x{9fa5}]+~u', $string, $matches);
\x{4e00}-\x{9fa5}:Unicode 中日韓統一表意文字基本區範圍(約 2 萬常用漢字)。u 修飾符:強制 PCRE 以 UTF-8 模式解析模式與目標字串,否則 \x{...} 會報錯或匹配錯誤。若需包含擴展區(如生僻字、康熙字典字符),可擴展範圍:
// 基本區 + 擴展 A 區
~[\x{4e00}-\x{9fa5}\x{3400}-\x{4dbf}]+~u
$str = "Hello 世界 123 你好!";
preg_match_all('~[\x{4e00}-\x{9fa5}]+~u', $str, $matches);
print_r($matches[0]);
// 輸出: Array ( [0] => 世界 [1] => 你好 )