4

可能重复:
根据 php 中的数字拆分字符串数组?

我有一组数据,这些数据都在一大块文本中。它看起来类似于以下内容;

01/02 10:45:01 测试数据 01/03 11:52:09 测试数据 01/04 18:63:05 测试数据 01/04 21:12:09 测试数据 01/04 13:10:07 测试数据01/05 07:08:09 测试数据 01/05 10:07:08 测试数据 01/05 08:00:09 测试数据 01/06 11:01:09 测试数据

我试图简单地使它可读(例如,见下文),但每条线上唯一相似的地方是开头遵循 00/00 模式。

01/02 10:45:01 test data 
01/03 11:52:09 test data 
01/04 18:63:05 test data 
01/04 21:12:09 test data 
01/04 13:10:07 test data 
01/05 07:08:09 test data 
01/05 10:07:08 test data 
01/05 08:00:09 test data 
01/06 11:01:09 test data 

我已经通过将其与正则表达式模式匹配来将其拆分出来;

$split = preg_split("/\d+\\/\d+ /", $contents, -1, PREG_SPLIT_NO_EMPTY);

这个输出;

Array ( [0] => 
        [1] => 10:45:01 test data 
        [2] => 11:52:09 test data 
        [3] => 18:63:05 test data 
        [4] => 18:63:05 test data 
        ...and so on

但正如您所看到的,问题在于 preg_split 没有保留分隔符。我尝试将 preg_split 更改为;

$split = preg_split("/\d+\\/\d+ /", $contents, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE

但是,这与上面的返回相同,行首没有 00/00。

我做错了什么还是他们是实现这一目标的更好方法?

4

2 回答 2

4

您可以preg_split()使用前瞻断言在字符串中的任何点拆分,然后是数字斜线数字。

$result = preg_split('#(?=\d+/\d+)#', $contents, -1, PREG_SPLIT_NO_EMPTY);

使用该PREG_SPLIT_NO_EMPTY标志是因为字符串的开头也是三个数字的点,因此此处发生空拆分。我们可以将正则表达式更改为不在字符串的开头拆分,但这会使一目了然地理解起来有点困难,而标志非常清晰。

于 2013-01-02T12:01:42.403 回答
2

PHP:

<?php

$text = '01/02 10:45:01 test data 01/03 11:52:09 test data 01/04 18:63:05 test data 01/04 21:12:09 test data 01/04 13:10:07 test data 01/05 07:08:09 test data 01/05 10:07:08 test data 01/05 08:00:09 test data 01/06 11:01:09 test data';

$text = preg_replace('/(\d{2})\/(\d{2})(.*)/U', PHP_EOL . "$0", $text);

echo $text;

输出:

01/02 10:45:01 test data 
01/03 11:52:09 test data 
01/04 18:63:05 test data 
01/04 21:12:09 test data 
01/04 13:10:07 test data 
01/05 07:08:09 test data 
01/05 10:07:08 test data 
01/05 08:00:09 test data 
01/06 11:01:09 test data

演示

于 2013-01-02T12:00:35.383 回答