正規表現は記号を組み合わせて文字列から特定のパターンに合うものを抽出することが出来るとても便利な機能です。まだ始めたばかりでしっかり理解していませんが、使ってみて出来たことを [ 正規表現メモ ] として記録していこうと思います。
今回はlivedoor Weather Hacksを利用したときに使った正規表現です。地域の一週間の天気データをもったRSSフィードから日付・最高気温・最低気温を正規表現を使って取り出してみました。
まずはRSSフィードの一日分のデータを見てみます。
<item> <title>[ 25日(木)の天気 ] 横浜 - 晴れ - 最高気温11℃ - 1月25日(木)</title> <link>http://weather.livedoor.com/area/14/70.html?r=rss20070125</link> <category>天気予報</category> <day>Thursday</day> <image> <title>晴れ</title> <link>http://weather.livedoor.com/area/14/70.html?r=rss20070125</link> <url>http://image.weather.livedoor.com/img/icon/1.gif</url> <width>50</width> <height>31</height>< </image> <description>25日(木)の天気は晴れ最低気温は5℃でしょう。lt;/description> <pubDate>Wed, 24 Jan 2007 17:00:00 +0900</pubDate> </item>
RSSフィードには日付と気温のデータが個別に存在しません。そのため< title > から日付、< description >から気温を取り出します。
preg_match –正規表現によるマッチングを行う
mixedpreg_match( string pattern, string subject [, array &matches [, int flags [, int offset]]] )
$subject = "[ 25日(木)の天気 ] 横浜 - 晴れ - 最高気温11℃ - 1月25日(木)";
$pattern = "/([1-9]?[0-9])月([1-9]?[0-9])日/";
preg_match($pattern, $subject, $matches);
結果は
Array ( [0] => 1月25日 [1] => 1 [2] => 25 )
となります。
同様に気温は
$pattern = "/(-?[1-9]?[0-9])℃/";
で取り出すことができました。
? は「0回ないし1回現れるものにマッチする」という意味になります。




