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

Gun*_*tar 4 php regex string split

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

\n\n
    $str = \'T bw4\xc2\xa0\xc2\xa005/09/19 07:51 am BW6N 499.803\';\n    $cleanStr = iconv("UTF-8", "ISO-8859-1", $str);\n    $strArr = preg_split(\'/[\\s\\t]/\', $cleanStr);\n    var_dump($strArr);\n
Run Code Online (Sandbox Code Playgroud)\n\n

Var_dump 产生以下结果:

\n\n
array:6 [\xe2\x96\xbc\n 0 => "T"\n 1 => b"bw4  05/09/19"\n 2 => "07:51"\n 3 => "am"\n 4 => "BW6N"\n 5 => "499.803"\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

数组“1 => b”bw4 05/09/19”中的 #1 项不正确,我无法弄清楚数组值前面的字母“b”是什么。\n此外,空格(es) 在“bw4”和“05/09/19”之间\n任何关于如何更好地实现字符串分割的建议都非常感谢。\n这是原始字符串: https://3v4l.org/2L35M,这是来自我的本地主机的结果图像:http://prntscr.com/jjbvny

\n

Wik*_*żew 6

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

\n\n
\'~\\s+~u\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

您的\'/[\\s\\t]/\'模式仅匹配单个空白字符 ( \\s) 或制表符 ( \\t) (这当然是多余的,因为\\s已经匹配制表符),但由于u缺少修饰符,因此\\s无法匹配您拥有的\\u00A0字符(硬空格)后bw4

\n\n

所以,使用

\n\n
$str = \'T bw4\xc2\xa0\xc2\xa005/09/19 07:51 am BW6N 499.803\';\n$strArr = preg_split(\'/\\s+/u\', $str);\nprint_r($strArr);\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅PHP演示

\n\n
Array\n(\n    [0] => T\n    [1] => bw4\n    [2] => 05/09/19\n    [3] => 07:51\n    [4] => am\n    [5] => BW6N\n    [6] => 499.803\n)\n
Run Code Online (Sandbox Code Playgroud)\n