2016-10-27 70 views
1

我正在改變時間戳以簡碼我已經有代碼。更改爲短代碼的時間戳正則表達式

$pattern = '/(\d{1,2}:\d{2}(?::\d{2})?)(?!.*?["\'])/'; 
$replacement = '[spp-timestamp time="${1}"]'; 
$foundTimestamp = preg_replace ($pattern,$replacement, $content); 

這是工作完美。提前

但我不想包含時許選擇時間戳,下午

例如凌晨01:00或上午12時01分00秒至01:00時或下午12時01分00秒

謝謝。

+1

PLZ加一個或兩個樣品的輸入和輸出 –

回答

1

您可以使用

'~(?<!:)\d{1,2}:\d{2}(?::\d{2})?(?!(?::\d{2})?\s*[ap]\.?m\.?)(?!.*?["\'])~i' 

[spp-timestamp time="$0"]更換其中$0是整個匹配反向引用。

查看是否有:第一1位或2位之前和負先行(?!(?::\d{2})?\s*[ap]\.?m\.?)失敗比賽如果經過的時間具有PM或AM(帶有可選的點)regex demo

初始負回顧後發失敗比賽。

PHP demo

$re = '/(?<!:)\d{1,2}:\d{2}(?::\d{2})?(?!(?::\d{2})?\s*[ap]\.?m\.?)(?!.*?["\'])/i'; 
$str = '34:67:56 01:00am or 00:01:00am and 01:00pm or 00:01:00pm'; 
$result = preg_replace($re, '[spp-timestamp time="$0"]', $str); 
echo $result; 
// => [spp-timestamp time="34:67:56"] 01:00am or 00:01:00am and 01:00pm or 00:01:00pm 
+1

感謝您的快速幫助:) –