Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串中的任何Unicode空白字符与PHP正则表达式匹配_Php_Regex_String_Split - Fatal编程技术网

将字符串中的任何Unicode空白字符与PHP正则表达式匹配

将字符串中的任何Unicode空白字符与PHP正则表达式匹配,php,regex,string,split,Php,Regex,String,Split,我想在每个空间将文本消息拆分为数组。在我收到这条短信之前,它一直工作得很好。 以下是处理文本字符串的几行代码: $str = 'T bw4  05/09/19 07:51 am BW6N 499.803'; $cleanStr = iconv("UTF-8", "ISO-8859-1", $str); $strArr = preg_split('/[\s\t]/', $cleanStr); var_dump($strArr); Var_dump产生以下结果: a

我想在每个空间将文本消息拆分为数组。在我收到这条短信之前,它一直工作得很好。 以下是处理文本字符串的几行代码:

    $str = 'T bw4  05/09/19 07:51 am BW6N 499.803';
    $cleanStr = iconv("UTF-8", "ISO-8859-1", $str);
    $strArr = preg_split('/[\s\t]/', $cleanStr);
    var_dump($strArr);
Var_dump产生以下结果:

array:6 [▼
 0 => "T"
 1 => b"bw4  05/09/19"
 2 => "07:51"
 3 => "am"
 4 => "BW6N"
 5 => "499.803"
]
数组“1=>b”bw4 05/09/19“中的#1项不正确,我无法确定数组值前面的字母“b”是什么。 此外,“bw4”和“05/09/19”之间的空格 任何关于如何更好地实现字符串拆分的建议都将不胜感激。
这是原始字符串:这是来自我的localhost的result的图像:

,因为您提到这些值没有正确地分开 首先,试着修剪你的绳子两端

接下来,用单个空格替换字符串中的多个空格

$output = preg_replace('!\s+!', ' ', trim($str," "));
之后,可以根据空间进行分解

$fout = explode(" ",$output);
然后你可以把它打印出来


至于b前缀,@Daniel A.White发布的链接是相关的答案

我猜您的输入没有正确编码。尝试:

$cleanStr = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', utf8_encode($str));
这会为我清理字符串:(如果这次显示正确)


注意:这也可能意味着编码在从数据库(文本是否存储在UTF-8?)、web服务器(在Apache的httpd.conf文件
AddDefaultCharset UTF-8
set?)或PHP(在PHP.ini文件
=“UTF-8”
?)、网站(
)或BOM中被破坏(字节顺序标记)在源文件的开头?

以匹配您可能使用的任何一个或多个Unicode空白字符

'~\s+~u'
您的
'/[\s\t]/'
模式只匹配一个空格字符(
\s
)或一个制表符(
\t
)(这当然是多余的,因为
\s
也已经匹配制表符),但是由于
u
修饰符缺失,
\s
无法匹配\u00A0字符(硬空格)您有after
bw4

所以,使用

$str = 'T bw4  05/09/19 07:51 am BW6N 499.803';
$strArr = preg_split('/\s+/u', $str);
print_r($strArr);
看到了吗


没有看到它~。你确定你在这里正确地表示了字符串吗?这很棘手!当我发布问题时,一些字符可能被过滤掉了。这是原始字符串:这是来自我的localhost的结果的图像:“
array:6”可能重复[▼”这不是标准的
var_dump
!您是否使用了一些框架或PHP扩展来提供一些美化的转储?@Daniel问题是,这应该是一个与PHP6的前向兼容性注释,但从未发生过。到目前为止,二进制字符串和非二进制字符串之间没有区别。输出的内容也不清楚正是这样。
Array
(
    [0] => T
    [1] => bw4
    [2] => 05/09/19
    [3] => 07:51
    [4] => am
    [5] => BW6N
    [6] => 499.803
)