将字符串中的任何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字符(硬空格)您有afterbw4
所以,使用
$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
)