[PHP-users 27724] Re: 定型フォーマットのログ変換

nomoto shin-1 @ ca2.so-net.ne.jp
2005年 12月 1日 (木) 21:39:48 JST


  nomotoです。

>つまり、ログの移行をしたいのですが、preg_replace を使うとものすごく複雑になってしまいます。

わたしもよくHTMLの切り出しをしますが、固定の部分(発言内容などの
可変な部分にも現れないタグ部分)を見つけて、それで判断するのが基本です。

ただし、1発言分を1個の正規表現で取り出そうと無理をすると、メール
アドレスが無かったり、発言内容にタグが入っていたりした場合に、うまく
切り出せないといった事が起きてしまいますので、ベタですが1行ずつ
判定してフラグを立てながら処理するのが確実です。

この例であれば

1.発言の始まり <td align="center"><img src="icon/
2.画像ファイル名 <img src="icon/(.*?.gif)"
3.発言番号/タイトル <td>No.(\d+) (.*?)<br>
4.メールアドレス <td><a href="mailto:(.*?)">
5.URL <td><a href="(http.*?)"
6.投稿内容 <td colspan="2">(.*?)</td>
7.1発言の終了(ここでデータ書き出し) </table>

といった感じでしょうか。投稿内容にtdやtrが無い事が前提です。

メール無しでURLがあるときや、メールもURLも無くて投稿があるときにも
6.の判定のときに「発言番号を見つけた後で・・」という条件をつければ
拾い漏れもおきないと思います。



PHP-users メーリングリストの案内