2012-12-21 168 views
2

我知道有很多這方面的問題,但似乎沒有簡單的方法來做我想做的事情。以下面的字符串作爲一個例子:PHP提取字符串的一部分

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」時,是否有辦法簡單地保留日期?

+0

你試過用空字符串替換過期,並通過strtotime? –

回答

5
preg_replace('/expires\s*(.*?)@/', '\1', $string); 

你也並不真的需要使用正則表達式,但我會因爲它看起來更簡單。這裏是一個非正則表達式的解決方案:

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

謝謝。是的,我必須放置14個,因爲當我創建9時,瀏覽器中的空間變成了nbsp。 – Sweepster

0

你想看看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); 
0

我必須在我工作的網站上格式化完全相同的字符串。這是我使用的。似乎工作好吧:

<?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');