我需要用什么才能从字符串中获取2个单词?正则表达还是爆炸?

时间:2013-01-19 08:57:37

标签: php regex explode

这是字符串:

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 个答案:

答案 0 :(得分:4)

在这种情况下,可以使用

爆炸。键和值与值前面的键成对出现,因此请查找关键字,然后将下一个字符串作为值。我可能会将其作为表单数组返回(key1 =&gt; value1,key2 =&gt; value2,)

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

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

答案 1 :(得分:1)

字符串中的空格太多,无法按照预期的顺序进行。

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

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

与regexp结合使用

答案 2 :(得分: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 )

模式“/([a-z A-z])* day /”匹配字符串以日结束  pattern“((\ d {2}。){2}(\ d {4}))”匹配表单的日期(dd.mm.yyyy)或(mm.dd.yyyy)   Live Demo

答案 3 :(得分:-1)

只要输入没有改变,

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

foreach(explode("\n", $str) as $line)
    print_r(explode(' ', $line));