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

以下のような、入れ子になっているtableタグが存在しているとして。
<table>
<tr><td>...</td></tr>
<tr><td><table>...</table><td></tr>
</table>

この入れ子がいくつになってもマッチする正規表現を教えてください。

自分が試しに書いてみたのはこれですが、2番目以降の</table>タグが残ってしまうようです。
/<table.*?>.*?(:?<table.*?>.*?<\/table>)*.*?<\/table>/ms

●質問者: フジカケ
●カテゴリ:コンピュータ
✍キーワード:MS タグ マッチ 存在 正規表現
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kn1967
●60ポイント

例としては3重までネストさせてますが4重でも5重でも正規表現部分はそのままです。

$a = "<body><table><tr><td><table><tr><td><table>...</table></td></tr></table></td></tr><tr><td><table>...</table><td></tr></table></body>";
$a =~ /(<table(.*|<table[^<table]*<\/table>)<\/table>)/ig;
print $1;

上記を動かした結果として

<table><tr><td><table><tr><td><table>...</table></td></tr></table></td></tr><tr><td><table>...</table><td></tr></table>

が得られます。

以上とりあえずActivePerl v5.8.8で作ってみました(元データに改行コードは含まないものとしています)。

処理系が異なる場合は動かないかもしれません(Perl、PHP、JAVA、VBScriptなどなど、、、正規表現には微妙に違いがあります)ので適宜改造いただくか、もしくはお使いの処理系とバージョンを私への返答に含んでいただければ、その方面が得意な方が回答を寄せてくださると思います。

http://downloads.activestate.com/ActivePerl/Windows/5.8/

◎質問者からの返答

PHPでpreg_match使っています。

関連質問


●質問をもっと探す●



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