正則表達式匹配只有經常串,所以讓我們打破你提供的例子字符串和尋找一些規律性:
8.00am-10.00Am
8.00PM-11.00AM
8.00PM-11.00AM
8.00PM-11.00AM
10.00pm-11.00pm
所以我可以看到:
- 開頭總是與一個或兩個數字。這可以表示爲
\d{1,2}
- 這後面跟着一個點
.
或冒號:
。 \d{2}
- 那麼無論是串
AM
或PM
,不區分大小寫:這可以通過2位被表示爲[.:]
- 這總是跟隨。要使用不區分大小寫,我們可以在整個模式中使用
i
修飾符,所以我們只需要匹配am
或pm
,編寫爲(am|pm)
。這將表現爲一個捕獲組,我們也不需要捕捉,所以我們可以(?:am|pm)
,非捕獲組
- 然後一個破折號
-
,這可以從字面上表達
- ,則首先優化表達部分模式重複。
所以,當我們把它放在一起,我們得到:
/\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i
別急......這將留在主題字符串末尾尾隨空白。那麼,我們只需要trim()
就可以了,但是我們也可以通過將\s*
添加到模式中來獲得正則表達式來處理這個問題。
/\s*\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i
所以現在我們只需要用空字符串替換任何匹配這個模式的東西。你可以在PHP與preg_replace()
做到這一點:
$pattern = '/\s*\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i';
$string = 'Uefa Europa League Simulcast 8.00am-10.00Am';
$string = preg_replace($pattern, '', $string);
var_dump($string);
See it working
它不是爲11.00PM,上午02點的工作?你可以添加這個請 – 2013-03-14 11:44:32
它工作於'11.00PM-2.00AM'(剛剛在我的代碼中試過)。你之前還是之後有空間?編輯考慮到之前或之後的空間...請嘗試新的正則表達式 – 2013-03-14 11:47:06
是的作品,謝謝:) – 2013-03-14 12:11:10