2011-09-16 9 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を使用するにはどうしたらいいですか?私は正規表現になると騒ぎですが、それは私が使うべきだと私は思っています。私はその文字列の中でワイルドカードを見つける方法がわかりません。

ありがとうございました。

+2

XMLパーサーを使用していない理由はありますか? –

+2

XMLまたはHTMLをregexで解析しないでください: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 –

+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 –

+2

@downvoter:データがXMLやHTMLではなく、ファイル内のスニペットの場合はどうなりますか?アドバイスはXMLを解析するために正規表現を使用しません.HTMLは大きなアドバイスですが、それがあらゆる状況に適用できるわけではありません。宗教的な "omgはそれが悪いことを使わないでください"という言葉に基づいて、downvoting投稿を止めてください。私はこの場合正規表現を使用してspecificalyを提唱していない、私は正規表現を使用する方法を学ぶためのアドバイスを与えた。うーん.... – 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タグを、エコーされます逆転した。繰り返しますが、これを行うための式を使用することには反対です。