我做錯了什麼?它仍然返回21-11-2016
。正則表達式最新錯誤?
$string = '21-11-2016';
$pattern = '/({0-9}(2))-({0-9}(2))-({0-9}(4))/';
$rep = "Month: $2 , Day: $1 , Year: $3";
echo preg_replace($pattern, $rep, $string);
die();
我做錯了什麼?它仍然返回21-11-2016
。正則表達式最新錯誤?
$string = '21-11-2016';
$pattern = '/({0-9}(2))-({0-9}(2))-({0-9}(4))/';
$rep = "Month: $2 , Day: $1 , Year: $3";
echo preg_replace($pattern, $rep, $string);
die();
您有{..}
和(..)
錯誤的地方。用途:
echo preg_replace('/([0-9]{2})-([0-9]{2})-([0-9]{4})/', $rep, $string);
{...}
使它成爲一個範圍,[...]
使它成爲一個字符類。
哦....該死的)時間去睡覺... TY –
這是你想要的圖案:
$pattern = '/(\d{2})-(\d{2})-(\d{4})/';
然而,正則表達式解析日期是不是一個好的做法。使用內置的日期功能!
因爲這不是一個有效的正則表達式。您已將[]
和{}
顛倒過來。
[]
定義字符類別和範圍,例如, [0-9]
是「全部數字」。
{}
定義了數量。例如{2}
的意思是「以前的兩個」。
()
定義了捕獲組。 (2)
是毫無意義的。 - 你只是捕獲一個固定的2
。
既然你是向後的,那麼使用無效的{}
範圍會產生語法錯誤,而且無論如何不會匹配任何東西。
嘗試
/([0-9]{2}-([0-9]{2})-([0-9]{4})/
代替
[有些人,當遇到一個問題,認爲 「我知道,我將使用正則表達式。」現在他們有兩個問題。](http://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/):) – MonkeyZeus
我個人會有'$ string = '21 -11-2016 「; $ e = explode(' - ',$ string); echo'implode'(',',array('Month:'。$ e [1],'Day:'。$ e [0],'Year:'。$ e [2]));' 。另外,有一百萬次迭代,我得到了'0.2秒vs'.4' :) – MonkeyZeus