这是字符串:
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/>';
但我只得到“今天”和“关闭”,应该有截止日期,但它不起作用..
我应该使用正则表达式吗?
答案 0 :(得分:4)
爆炸。键和值与值前面的键成对出现,因此请查找关键字,然后将下一个字符串作为值。我可能会将其作为表单数组返回(key1 =&gt; value1,key2 =&gt; value2,)
当它工作时爆炸可能比正则表达式更快,但在大多数情况下速度并不是一个重要因素。
编辑:示例在元素之间有多个空格,需要先删除这些空格,或者在结果中跳过空白项。
答案 1 :(得分:1)
字符串中的空格太多,无法按照预期的顺序进行。
为了与explode()保持一致,请不要盲目地首先使用猜测数字但是print_r($pieces);
寻找数组成员,然后注意正确的数字,然后使用它
如果空格的数量可以变化 - regexp是唯一的[明智的]选择。虽然它可以通过使用简单的$pieces = preg_split('#\s#',$initialDate);
答案 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));