【问题标题】:PHP Extract part of a stringPHP 提取字符串的一部分
【发布时间】:2012-12-21 22:52:31
【问题描述】:

我知道对此有很多问题,但似乎没有简单的方法可以做我想做的事。以如下字符串为例:

expires  Friday, December 21, 2012 @ 11:59pm ET
expires  Saturday, December 22, 2012 @ 9:59pm ET

两个字符串相似,但以下代码不一致:

echo substr($string, 14, 27);

因为它输出以下内容:

Friday, December 21, 2012 @
Saturday, December 21, 2012

显然,我不想保留 @ 符号。有没有办法在删除“过期”和“@##:##pm ET”的同时简单地保留日期?

【问题讨论】:

  • 你试过用空字符串替换 expires 并通过 strtotime 吗?

标签: php string extract substr


【解决方案1】:
preg_replace('/expires\s*(.*?)@/', '\1', $string);

您也不需要使用正则表达式,但我会使用它,因为它看起来更简单。这是一个非正则表达式的解决方案:

//I took 14 from you, but it seems to be 9
substr($string, 14, strpos($string, '@') - strlen($string));

【讨论】:

  • 谢谢。是的,我必须输入 14,因为当我输入 9 时,空间会在浏览器中变成 nbsp。
【解决方案2】:

你想看http://php.net/manual/wn/function.strpos.php

strpos "查找字符串中子字符串第一次出现的位置"

所以你想做这样的事情:

$string = "expires  Friday, December 21, 2012 @ 11:59pm ET";
$string = str_replace("expires ", "", $string); //remove "expires "
$string = substr($string, 0, strpos($string, "@")-1); // Copy anthing up to the first "@"
echo($string);

【讨论】:

    【解决方案3】:

    我必须在我工作的网站上格式化完全相同的字符串。这就是我使用的。似乎工作正常:

     <?PHP
    
    function FormatDate($string)
        {
            $exploded = explode(" ", $string);
            $newstring = $exploded['2']." ".$exploded['3']." ".$exploded['4']." ".$exploded['5'];
            return $newstring;
        }
    
    echo FormatDate('expires  Friday, December 21, 2012 @ 11:59pm ET');
    

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多