我正在使用PHP 5.3从Web服务调用接收数据集,该调用会返回有关一个或多个事务的信息。每个事务的返回值由管道(|
)分隔,事务的开始/结束由空格分隔。
2109695|49658|25446|4|NSF|2010-11-24 13:34:00Z 2110314|45276|26311|4|NSF|2010-11-24 13:34:00Z 2110311|52117|26308|4|NSF|2010-11-24 13:34:00Z (etc)
由于日期时间戳中的空格,对空间进行简单拆分不起作用。我知道正则表达式很好,知道总有不同的方法可以解决这个问题,所以我想获得一些专家意见可以帮助我提出最密集的正则表达式。
答案 0 :(得分:4)
如果每个时间戳最后都有一个Z
,那么只有当Z
前面有一个$transaction = preg_split('/(?<=Z) /',$input);
时才能使用正向后看断言进行分割:
|
获得交易后,您可以将其拆分为Z
以获取各个部分。
请注意,如果您的数据$transaction = preg_split('/(?<=\d\d:\d\d:\d\dZ) /',$input);
后面跟着时间戳以外的其他位置,则上述逻辑将失败。要克服这个问题,只有在时间戳模式之前才能分割空间:
{{1}}
答案 1 :(得分:1)
使用explode('|', $data)
功能
答案 2 :(得分:1)
每个时间戳最后都会有一个Z,所以用'Z'爆炸它。您不需要正则表达式。只有时间之后,日期才有可能是Z.
答案 3 :(得分:1)
正如其他人所说,如果您确定在日期之外的任何地方都不会有Z
个字符,那么您可以这样做:
$records = explode('Z', $data);
但如果你把它们放在其他地方,你就需要做一些更有趣的事情。
$regex = '#(?<=\d{2}:\d{2}:\d{2}Z)\s#i';
$records = preg_split($regex, $data, -1, PREG_SPLIT_NO_EMPTY);
基本上,该记录会查找时间部分(00:00:00
),后跟Z
。然后它分裂在下面的空格字符上......