2011-09-16 130 views
0

我正在創建動態XML並需要更新服務器上文件中的lastBuildDate。我知道如何改變這一切。preg_match和preg_replace問題

我想我可以使用preg_match來查找表達式和preg_replace來替換它。我的字符串像這樣:

$build_date = '<lastBuildDate>Fri 16 Sep 2011 2:30:15 -6:00 GMT<lastBuildDate>'; 

如何使用的preg_match找到標籤內的日期,然後我怎麼更換呢?在正則表達式方面,我是一個noob,這是我認爲我必須使用的。我只是不確定如何在該字符串內找到通配符。

謝謝。

+2

有沒有原因,你不使用XML解析器? –

+2

不要使用正則表達式來解析XML或HTML:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags相反,使用XML解析器:http:/ /stackoverflow.com/questions/3577641/best-methods-to-parse-html-with-php – 2011-09-16 21:34:31

+0

我不知道。我沒有意識到有這麼多的參與。好的,我將使用XML解析器。謝謝。 – sehummel

回答

1

我建議您閱讀preg_matchPCRE syntax文檔,然後使用諸如RegExr這樣的工具來解釋您用英語單詞編寫的正則表達式。這是一個很好的工具。

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/ 1732454#1732454 – 2011-09-16 21:43:31

+2

@downvoter:如果數據不是XML或HTML,而只是文件中的代碼片斷?該建議不使用正則表達式來解析XML或HTML是偉大的建議,但這並不意味着它可以應用於任何和所有情況。停止downvoting基於宗教信仰「omg不要使用它是邪惡的」tirades。在這種情況下,我沒有主張使用正則表達式,我給出瞭如何學習使用正則表達式的建議。哎呀.... – JRL

0

乍一看,我認爲你在關閉標記上缺少'/'。我會假設應該有一個。

像其他人已經評論過的一樣,您應該使用XML解析器。

不過,要回答如何做到這一點瓦特/的preg_replace,你可以做到這一點:

$build_date = "<lastBuildDate>Fri 16 Sep 2011 2:30:15 -6:00 GMT</lastBuildDate>"; 

function replacer($matched) { 
    return "<lastBuildDate>" . strrev($matched) . "</lastBuildDate>"; 
} 

echo preg_replace("/<lastBuildDate>(.*?)<\/lastBuildDate>/me", "replacer('$1')", $build_date); 

其中(例如的緣故)的日期字符串是簡單的例子將顯示XML標記,逆轉。同樣,我建議不要使用表達式來執行此操作。