[PHP-users 21189]Re: ネストされたタグを正規表現で抽出する場
Katsuo Mogi
mogi-k2 @ msg.biglobe.ne.jp
2004年 4月 8日 (木) 15:46:36 JST
おせわになります。茂木です。
レスいただき、正規表現も書き直していただきありがとうございます。
In the message [PHP-users 21180] Re: ネストされたタグを正規表現で抽出する場
<16387C3B-890C-11D8-92BC-0050E4D9D96F @ offside.ne.jp>
Eiji Miwa <miwa @ offside.ne.jp> wrote:
> preg_match (
> '/<table[^>]*>(?:(?>(?:(?!<\/?table[^>]*>).)*)|(?R))*<\/table>/si',
> $string, $matches );
> たぶん、こんな感じでうまくいくんじゃないでしょうか。
前のメールに載せたHTMLはきちんと動いてくれたのですが、
今度はこの
$string2 = '<body>
<table cellspacing="0">
<tr>
<td id="rightcolumn">
<!-- Start right blocks loop -->
<div class="blockTitle">ヘッドラインブロック</div>
<div class="blockContent"><p><a href="http://www.xoops.org/" target="_blank">XOOPS Official Website</a><br />
<ul>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1381">chillout.org.uk :: a XOOPS implementation with mostly static content</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1380">End of Life for Red Hat 9.0</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1379">CraftsOnline South Africa goes live</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1378">xcGallery for XOOPS Multilanguage</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1377">New Theme from PetitOOps</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1376">FnGeeks.net Joins the Xoops Community</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1375"> XOOPS CMS/Microsoft Applications Deal 的nevitable</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1373">New XOOPS Image</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1372">Tplleguestats RC1 released</a></li>
<li><a href="http://example.com/modules/xoopsheadline/index.php?id=1#http://www.xoops.org/modules/news/article.php?storyid=1371">Musical Portal in Hungary</a></li>
</ul></p>
</div> <!-- End right blocks loop -->
</td>
</tr>
</table>
</body>';
HTMLを処理させると、やはりInternal Server Errorとなってしまいます。
また例が大きくてすいません。実際は前回のと今回の内容は1つのファイルです。
正規表現に問題があるのか、PCREの限界なのか
(Perlだと
$regexp = qr/<table[^>]*>(?:(?>(?:(?!<\/?table[^>]*>).)*)|(??{$regexp}))*<\/table>/si;
while ($string2 =~ /($regexp)/g) {
print $1, "\n";
}
で行けるようです)かなり手詰まり状態になっております。
> > class="menuMain"という属性が付いているaタグの行を1つでも消すと動くようなので、
> > $stringが長すぎ(タグの入れ子が深すぎ?)なのでしょうか?
> 推測ですが、修飾子に「x」があるので php が class を定義しようとして
> parse error になってしまっているのかもしれません。
x修飾子をつけても、前のHTMLは動くようです。
引き続き、皆様のご教授願えますでしょうか?
# 最終的にやりたいことは、Webアプリの自動テストです。
# 今はXOOPSの自作モジュールをテストしたくてこのようなHTML
# をいじくっております。
# PerlやRubyにはフレームワークが存在してますがPHPはこれからなのでしょうか・・・。
--
---------------------------------
茂木克夫
mogi-k2 @ msg.biglobe.ne.jp
---------------------------------
PHP-users メーリングリストの案内