我尝试从 excel 的字符串中按空格爆炸
<?php
$string = 'RT 2';
print_r(explode(' ', $string));
// I try
$parts = preg_split('/s+/', $string);
// and this
preg_match("/([а-яА-Яa-zA-Z]*)([0-9]*)/iu", $string, $parts);
但它不起作用。这不是黑桃。这是另一回事。
示例 - https://ideone.com/S7SEEE
如果 bin2hex((
$string = 'RT 2';
var_dump(bin2hex($string));
// string(10) "5254c2a032"
最简单的解决方案是:
<?php
$string = 'RT 2';
print_r(preg_split('/s+/u', $string));
无需指定表示空间的具体 unicode 字符。/u
标志将其整个空间范围添加到s
字符类中。
编辑:请参阅Karol Samborski的答案,添加
u
标志 更改/s
的范围以包括所有 Unicode 空间。
您可以使用不间断空格的 Unicode 序列,该序列将x00A0
(正则表达式格式(,并将相应的 /u
(Unicode( 标志添加到正则表达式中:
$string = 'RT 2';
print_r(preg_split('/[sx00A0]+/u', $string));
演示:https://3v4l.org/d7pld
您的字符串中有一个特殊的空格,您可以随时使用 dechex(ord());
或 bin2hex()
或 unpack()
来调查字节。
52 54 c2 a0 32
^... R ^... 2
^... non-breaking space
^... T (2 bytes)
此正则表达式涵盖普通空格字符、不间断空格和窄空格字符:
/[x202Fx00A0s]/
将u
用于正则表达式,x
用于预处理匹配(PCRE 兼容(。