2011-04-21 327 views
2

我在使用preg_match查找和替換字符串時遇到問題。感興趣的字符串是:使用preg_match替換字符串

<span style="font-size:0.6em">EXPIRATION DATE: 04/30/2011</span> 

我需要一個不同的日期到目標並更換之日起,「2011年4月30日」。有人可以扔我骨頭給我正則表達式來匹配這種模式在PHP中使用preg_match?我還需要以這樣的方式來匹配,只替換到第一閉合跨度和代碼不關閉span標籤後,如:

<span style="font-size:0.6em">EXPIRATION DATE: 04/30/2011</span><span class="hello"></span> 

我不精通正則表達式,雖然我我花了最後一小時努力學習足夠的工作,我完全失敗了。非常感謝!

編輯:正如你所看到的,這讓我筋疲力盡。我的意思是preg_replace,而不是preg_match。

回答

4

如果你是一個置換後,可以考慮使用preg_replace(),像

preg_replace('@(\d{2})/(\d{2})/(\d{4})@', '<new date>', $string); 
+0

這工作完美!謝謝布朗先生。認真......這是一個巨大的幫助! – tollmanz 2011-04-21 23:22:13

+0

@Sardine:它通常是一個好主意,標記爲「接受」,如果它解決您的問題:) – 2011-04-21 23:24:00

+0

@Brecht答案:謝謝!我想,它不會讓我:(系統說我不得不等待4分鐘。謝謝你的提示!比斜槓其他 – tollmanz 2011-04-21 23:26:23

1

正則表達式應該是:

(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d 

如果你想只匹配一個實例,這是確定。對於多個實例,請改用preg_match_all。取自http://www.regular-expressions.info/regexbuddy/datemmddyyyy.html

編輯:你正在尋找一個PHP腳本內搜索和替換,或者你想做一些JavaScript的替代?

+0

我喜歡日間和月份驗證,但第一年是有點限制(僅限20世紀和21世紀) – Phil 2011-04-21 23:25:40

3

如何:

$toBeFoundPattern = '/([0-9][0-9])\/([0-9][0-9])\/([0-9][0-9][0-9][0-9])/'; 
$toBeReplacedPattern = '$2.$1.$3'; 

$inString = '<span style="font-size:0.6em">EXPIRATION DATE: 04/30/2011</span>'; 

// Will convert from US date format 04/30/2011 to european format 30.04.2011 
echo preg_replace($toBeFoundPattern, $toBeReplacedPattern, $inString); 

,並打印

EXPIRATION DATE: 30.04.2011 

模式總是開始和結束與所謂的分隔字符相同。通常使用字符/。

$ 1引用字符串,該字符串匹配由[[0-9] [0-9])匹配的第一個字符串,$ 2引用爲(...)和$ 3,最後一個匹配的四個字母(...) )。

匹配單個字符,這是括號內列出的一個字符。例如。 [a-z]匹配所有小寫字母。

要使用模式中特殊含義的字符/內部,您需要通過\轉義它以使其成爲字面斜槓字符。

更新:使用下面指出的{..}是重複模式的簡寫。

+0

模式機箱可字符(請參閱我的答案),他們只需要保持一致。 – Phil 2011-04-22 00:02:10

+1

謝謝指出。更新了我的答案。 – SteAp 2011-04-22 00:03:34

+0

謝謝!絕對有助於完善比賽! – tollmanz 2011-04-23 20:30:44