正则表达式打破中文字符串

Moa*_*oak 2 php regex cjk

当我运行这段代码和类似的一些中国镍(你)字符(或其它)被切碎和破碎.

$sample = "???? ?? ?";
$parts = preg_split("/[\s,]+/", $sample);
var_dump($parts);

//outputs
array(4) {
  [0]=>
  string(2) "?"
  [1]=>
  string(9) "???"
  [2]=>
  string(6) "??"
  [3]=>
  string(3) "?"
}

//in ??? ?? ??
//out
array(4) {
  [0]=>
  string(9) "???"
  [1]=>
  string(2) "?"
  [2]=>
  string(3) "?"
  [3]=>
  string(6) "??"
}
Run Code Online (Sandbox Code Playgroud)

我的正则表达式错了吗?

Art*_*cto 6

如果您的字符串是UTF-8,则必须使用u修饰符:

$sample = "???? ?? ?";
$parts = preg_split("/[\\s,]+/u", $sample);
var_dump($parts);
Run Code Online (Sandbox Code Playgroud)

如果它是另一种编码,请参阅unicornaddict的答案.