2

这是字符串:

Added:  yesterday Closing: 17.02.2013

上面的字符串可能有变体,例如:

Added:  today Closing: 04.02.2013
Added:  16.01.2013 Closing: 15.02.2013

我需要能够获得“昨天”和“17.02.2013”​​或“今天”和“04.02.2013”​​或“16.01.2013”​​和“15.02.2013”

现在这就是我得到的..

$pieces = explode(" ", $initialDate);

echo $pieces[1]; // piece2
echo $pieces[3]; // piece2
echo '<br/><br/>';

但我只得到“今天”和“结束”,应该有截止日期,但它不起作用..

我应该使用正则表达式吗?

4

4 回答 4

4

在这种情况下,可以使用爆炸。键和值与值之前的键成对出现,因此查找关键字,然后将下一个字符串作为值。我可能会将其作为 (key1 =>value1, key2=>value2,) 形式的数组返回

当它工作时,explode 可能比正则表达式更快,但在大多数情况下,速度并不是一个重要因素。

编辑:该示例在元素之间有多个空格,需要先删除这些空格,或者在结果中跳过空项目。

于 2013-01-19T09:01:58.790 回答
1

您的字符串中有太多空格,无法按您期望的顺序排列。

为了与explode()保持一致,不要盲目地用猜测的数字来寻址数组成员,而是print_r($pieces);首先,然后注意正确的数字,然后使用它

如果空格的数量可以变化 - 正则表达式是唯一 [明智的] 选择。虽然它可以通过使用简单的与正则表达式结合$pieces = preg_split('#\s#',$initialDate);

于 2013-01-19T09:09:54.463 回答
0

您可以使用正则表达式来做到这一点

$string="Added:  today Closing: 04.02.2013";
$result = preg_match_all("/([a-z A-z])*day|((\d{2}\.){2}(\d{4}))/", $string,$match);
print_r($match[0]);

 output
 Array ( [0] => today [1] => 04.02.2013 )

模式 "/([az Az])*day/" 匹配字符串以日期结尾 模式 "((\d{2}.){2}(\d{4}))" 匹配日期格式 (dd.mm .yyyy) 或 (mm.dd.yyyy) 现场演示

于 2013-01-19T10:40:19.053 回答
-1

只要输入不变,爆炸就可以了。正则表达式也很好,但它们通常会使代码难以阅读并减慢应用程序的速度。似乎您缺少文本中的双空格,这会在您的爆炸结果中创建一个空字符串。使用 var_dump、print_r 或更好地使用调试检查内容。

foreach(explode("\n", $str) as $line)
    print_r(explode(' ', $line));
于 2013-01-19T09:06:56.673 回答