Preg_split 一个唯一的字符串行

Preg_split an unique string row

所以我遇到了一些棘手的事情,我似乎无法弄清楚如何正确拆分我的字符串。

这里是 var_dump($line):

Er.php:155:string 'TEST     Test    Test2  Director of Testing  +31-20-406-0000 +31-20-406-0001     testing@gmail.com    0000-10-27  2001-08-01  TestLocation    Amsterdam   AMSTERDAM   Amsterdam   100         Reputation Management       EMPL    EMEA        FHAMS   TEST3                2016-10-05 13:07:00 2019-03-26 10:01:00' (length=338)

所以在过去的 2 个小时里,我一直在尝试将这些部分分开,但我无法让它工作:

$arr = preg_split("/[\s\n]/", $line); - 我已经尝试了所有方法,但字符串正在使用制表符,但也有一些依赖于 2+ spaces,而有些不应该被分解。

我尝试使用单个 space 将它们分开,但这不起作用,因为 2016-10-05 13:07:00Director of TestingReputation Management 是单个 space 这需要在一起。

预期结果:

Array:
[1] => TEST
[2] => Test
[3] => Test2
[4] => Director of Testing
[5] => +31-20-406-0000
[6] => +31-20-406-0001
[7] => testing@gmail.com
[8] => 0000-10-27
[9] => 2001-08-01

您应该先查找您的日期字符串。日期正则表达式不是 100%(例如 2020-13-49 25:61:61 会被发现)但如果您正在寻找它,还有其他线程(正则表达式中的数字范围验证很长)。您还应该查找 phone 数字,定义为以 + 开头并在其后包含整数和连字符。如果遇到其中任何一种情况,我们都会捕获该值。此外,如果遇到两个连续的空格 (\s) 或一个制表符 (\t),它是否会溢出。

$test = 'SIMONSH     Test   Test2  Director of GCL Operations  +31-20-406-0000 +31-20-406-0001     Test.me@group.com    0000-10-27  2001-08-01  ZH    Amsterdam   AMSTERDAM   Amsterdam   100         Reputation Management       EMPL    EMEA        FHAMS   MORTELLM                2016-10-05 13:07:00 2019-03-26 10:01:00';
$arr = preg_split('/(\d{4}-\d{2}-\d{2}\h+\d{2}:\d{2}:\d{2}|\+[\d-]+)\h*|(?:\s{2,}|\t)/', $test, -1,  PREG_SPLIT_NO_EMPTY| PREG_SPLIT_DELIM_CAPTURE);
print_r($arr);

大致日期检查:\d{4}-\d{2}-\d{2}\h+\d{2}:\d{2}:\d{2}
Phone 号码查询:\+[\d-]+
这两个字符串之后的 \h* 是因为我们不关心它们的尾随空格。

两个连续的空格或一个制表符:(?:\s{2,}|\t)
?: 使 () 无法捕获,否则您最终会得到导致结果拆分的空白。