Просто передайте пустой шаблон с флагом PREG_SPLIT_NO_EMPTY
.
В противном случае вы можете написать шаблон с \X
(точка Unicode) и \K
(перезапустите совпадение полной строки). Я включу mb_split()
звонок и preg_match_all()
звонок для полноты.
Код: ( Демо )
$string='先秦兩漢';
var_export(preg_split('~~u', $string, 0, PREG_SPLIT_NO_EMPTY));
echo "\n---\n";
var_export(preg_split('~\X\K~u', $string, 0, PREG_SPLIT_NO_EMPTY));
echo "\n---\n";
var_export(preg_split('~\X\K(?!$)~u', $string));
echo "\n---\n";
var_export(mb_split('\X\K(?!$)', $string));
echo "\n---\n";
var_export(preg_match_all('~\X~u', $string, $out) ? $out[0] : []);
Вся продукция ::
array (
0 => '先',
1 => '秦',
2 => '兩',
3 => '漢',
)
С https://www.regular -expressions.info / unicode.html :
Как сопоставить одиночный графем Unicode
Сопоставление одной графемы, независимо от того, кодируется ли она как одна кодовая точка или как несколько кодовых точек с использованием комбинированных меток, легко в приложениях Perl, PCRE, PHP, Boost, Ruby 2.0, Java 9 и Just Great Software: просто используйте \ X.
Вы можете рассматривать \ X версию точки в Юникоде. Однако есть одно отличие: \ X всегда соответствует символам разрыва строки, тогда как точка не соответствует символам разрыва строки, если вы не включите точку, соответствующую режиму соответствия новой строки.
ОБНОВЛЕНИЕ, DHarman обратил мое внимание на то, что mb_str_split()
теперь доступен из PHP7.4.
Параметр длины по умолчанию для новой функции равен 1, поэтому параметр длины в этом случае может быть опущен.
https://wiki.php.net/rfc/mb_str_split
Демо Дхармана: https://3v4l.org/M85Fi/rfc#output