[正規表現メモ] ある程度きまった形式の文字列から特定の部分を取得する

正規表現は記号を組み合わせて文字列から特定のパターンに合うものを抽出することが出来るとても便利な機能です。まだ始めたばかりでしっかり理解していませんが、使ってみて出来たことを [ 正規表現メモ ] として記録していこうと思います。
今回は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回現れるものにマッチする」という意味になります。

そうのひとりごと

© 2017 PAOLOG