从 excel 字符串中按空格分解



我尝试从 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 兼容(。

最新更新