PHP:仅在非空白字符之间替换双空格
我有一个此格式的日期(从特定脚本中提取),我想删除该日期上的所有空格:PHP:仅在非空白字符之间替换双空格,php,string,replace,whitespace,space,Php,String,Replace,Whitespace,Space,我有一个此格式的日期(从特定脚本中提取),我想删除该日期上的所有空格: $date="Date: Tue Aug 2 10:43" 很简单,但诀窍是:在此之前,我想在“2”(或本月的任何其他第9天)之前添加一个“0”,但“0”必须替换“Aug”和“2”之间的第二个空格。 实现这一目标的最佳方法是什么? 请记住,日期(显然)每天都会变化,因此我们不能简单地做这样的事情: $date=str_replace("Aug 2","Aug 02",$date); 相反,我认为最好的
$date="Date: Tue Aug 2 10:43"
很简单,但诀窍是:在此之前,我想在“2”(或本月的任何其他第9天)之前添加一个“0”,但“0”必须替换“Aug”和“2”之间的第二个空格。
实现这一目标的最佳方法是什么?
请记住,日期(显然)每天都会变化,因此我们不能简单地做这样的事情:
$date=str_replace("Aug 2","Aug 02",$date);
相反,我认为最好的办法是做如下事情:
$date=str_replace("[x] [x]","[x] 0[x]",$date);
[x] 意思是:“任何非空白字符”(请原谅这种近似值!)我看到了两种可能性:
- 使用正则表达式
- 使用DateTime::createFromFormat,然后使用DateTime::format()
date()
和strotime()
执行此任务
$date = strtotime('Tue Aug 2 10:43'); //white spaces won't effect
echo date('D M 0\2 h:i',$date);
// output the date just replace the 2 with your 9th of month letter
嗯,也许有解决办法
$date=preg_replace("/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d)(\s+)/","$1 0$2$3",$date);
查看输入数据,您的特定脚本似乎生成了一个格式化的输出,这意味着它使用空格填充。这意味着字符串的长度可能总是相同的,而与其中的实际日期和时间无关。如果这是真的,那么您可以使用一个非常简单的代码:
if($date{22} == ' ') $date{22} = '0'; // replace space with zero
$date = preg_replace('/ +/', ' ', $date); // convert multiple spaces into single space
但是,如果您的特定脚本没有生成格式化的otput,则必须使用一些稍有不同但非常简单的方法:
$date = preg_replace('/ +/', ' ', $date); // convert multiple spaces into single space
$arr = explode(' ', $date); // split text into words by spaces
if($arr[3] < 10) $arr[3] = '0'.$arr[3];
$date = implode(' ', $arr); // combine words
$date=preg_replace(“/+/”,“,$date);//将多个空间转换为单个空间
$arr=爆炸(“”,$date);//按空格将文本拆分为单词
如果($arr[3]<10)$arr[3]=“0”。$arr[3];
$date=内爆(“”,$arr);//组合词
也许不是“最好”的解决方案,但实际上是在我的代码中实现的最简单的解决方案。像预期的那样工作。非常感谢!我使用了Lakremon解决方案,但无论如何感谢您的评论和您的时间,希望它能在将来有所帮助。它一定是所有解决方案中“最好的”解决方案,但是,在这个特定情况下,Akremon解决方案非常适合我,因为它是我最容易实现的。无论如何,非常感谢你的帮助!