人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで、正規表現のみでXMLタグと値を配列に格納するフリーの関数を教えてください。速度に信頼のあるパーサーを探しています。PHP:XMLパーサなどのライブラリおよび他言語はNG(既知)です。よろしくお願い致します。

●質問者: ukp
●カテゴリ:ウェブ制作
✍キーワード:NG PHP XML タグ フリー
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● szkn
●50ポイント

http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag

Perlメモ

下記URLのタグの正規表現を流用して作りました(SGMLの省略タグ機構は無視できるので一部変更)


$array = preg_split(&#39/(<[^\x22\x27<>]*(?:\x22[^\x22]*\x22[^\x22\x27<>]*|\x27[^\x27]*\x27[^\x22\x27<>]*)*>)/',$xml,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);


要素内容に<,>を含まないwell-formedなXMLという前提です.

速度については,preg_match_all()で同様のコトをするよりもpreg_split()の方が速いのは確認済みです.


正規表現を使わず,while ($i < strlen($xml)) で逐次解析する方法も思い浮かびますが,「正規表現」をつかってとのことなのでこんなもんではないでしょうか.


不勉強ですが,XMLで属性値内に<,>を含めないのであれば,正規表現は<[^>]+>で十分です.一応書いておくと

$array = preg_split(&#39/(<[^>]+>)/',$xml,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);

ですね

◎質問者からの返答

書いて頂いたコードを応用して実際に試してみました。PHPパーサ関数よりだいぶ早くなりました。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ