Php 我需要用什么从字符串中提取两个单词?正则表达式还是爆炸?

Php 我需要用什么从字符串中提取两个单词?正则表达式还是爆炸?,php,regex,explode,Php,Regex,Explode,以下是字符串: Added: yesterday Closing: 17.02.2013 上述字符串可能存在变化,例如: Added: today Closing: 04.02.2013 Added: 16.01.2013 Closing: 15.02.2013 我需要能够获得“昨天”和“2013年2月17日”或“今天”和“2013年2月4日”或“2013年1月16日”和“2013年2月15日” 现在这是我得到的 $pieces = explode(" ", $initialDate)

以下是字符串:

Added:  yesterday Closing: 17.02.2013
上述字符串可能存在变化,例如:

Added:  today Closing: 04.02.2013
Added:  16.01.2013 Closing: 15.02.2013
我需要能够获得“昨天”和“2013年2月17日”或“今天”和“2013年2月4日”或“2013年1月16日”和“2013年2月15日”

现在这是我得到的

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

echo $pieces[1]; // piece2
echo $pieces[3]; // piece2
echo '<br/><br/>';
$pieces=explode(“,$initialDate”);
echo$pieces[1];//第二件
echo$件[3];//第二件
回音“

”;
但是我只有“今天”和“结束”,应该有结束日期,但它不起作用


我应该使用正则表达式吗?在这种情况下,可以使用explode。键和值与值前面的键成对出现,因此查找关键字,然后将下一个字符串作为值。我可能会将其作为表单数组返回(key1=>value1,key2=>value2,)

当它工作时,explode可能比regex快,但在大多数情况下,速度并不是一个很大的因素


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

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

当它工作时,explode可能比regex快,但在大多数情况下,速度并不是一个很大的因素


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

只要输入不变,分解就可以了。正则表达式也很好,但它们通常会使代码难以读取,并降低应用程序的速度。似乎您缺少文本中的双空格,这会在explode的结果中创建一个空字符串。使用var\u dump、print\r或更好的方法签出内容使用调试

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

只要输入不改变,分解就可以了。正则表达式也很好,但它们通常会使代码难以读取,并降低应用程序的速度。似乎您缺少文本中的双空格,这会在explode的结果中创建一个空字符串。使用var\u dump、print\r或更好的方法签出内容使用调试

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

字符串中的空格太多,无法按预期顺序排列

为了保持explode(),不要盲目地用猜测的数字寻址数组成员,而是
print\r($pieces)首先,然后注意正确的号码,然后使用它


如果空格的数量可以变化,那么regexp是唯一[合理的]选择。尽管它可以通过使用simple
$pieces=preg_split(“#\s#,$initialDate)与regexp组合使用

字符串中的空格太多,无法按预期顺序排列

为了保持explode(),不要盲目地用猜测的数字寻址数组成员,而是
print\r($pieces)首先,然后注意正确的号码,然后使用它


如果空格的数量可以变化,那么regexp是唯一[合理的]选择。尽管它可以通过使用simple
$pieces=preg_split(“#\s#,$initialDate)与regexp组合使用

您可以使用正则表达式执行此操作

$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/”匹配字符串以day结尾 模式“((\d{2}。){2}(\d{4}))”匹配表单的日期(dd.mm.yyyy)或(mm.dd.yyyy)
您可以使用正则表达式来实现

$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/”匹配字符串以day结尾 模式“((\d{2}。){2}(\d{4}))”匹配表单的日期(dd.mm.yyyy)或(mm.dd.yyyy)

在我的示例中,当我使用echo$pieces[3]时,我找不到第二个日期,因为这些片段之间有多个空格,所以需要先删除这些空格。正则表达式是最简单的方法。使用preg_replace在使用结果时,请确保检查是否缺少键和缺少值。如果在删除多余空间时遇到一些问题,则这似乎不起作用“echo preg_replace('/\s+/','$initialDate);”在我的例子中,当我使用echo$pieces[3]时,我找不到第二个日期,因为在这些片段之间有多个空格,所以需要先删除这些空格。正则表达式是最简单的方法。使用preg_replace在使用结果时,请确保检查是否缺少键和缺少值。如果在删除多余空间时遇到一些问题,则这似乎不起作用“echo preg_replace('/\s+/','$initialDate);”可以从结果中删除空元素。这里真的不需要正则表达式。即使使用正则表达式拆分,他们仍然需要验证结果,以防输入不是key:value,而是key:key:thankfortheadvice,usedprint\r来获取地址。。这是第[1]件和第[2]件。这是我得到的输出。。今天结束日期:2013年2月4日,我想我必须按照@Peter的建议使用preg_replace。可以从结果中删除空元素。这里真的不需要正则表达式。即使使用正则表达式拆分,他们仍然需要验证结果,以防输入不是key:value,而是key:key:thankfortheadvice,usedprint\r来获取地址。。这是第[1]件和第[2]件。这是我得到的输出。。今天截止日期:2013年2月4日,我想我必须按照@Peter的建议使用preg_替换。。