正規表現 Part5
レス数が900を超えています。1000を超えると表示できなくなるよ。
0911デフォルトの名無しさん
2009/04/17(金) 00:44:36<td>タグの中身を取得したいのですが、ネストしている場合は、
内側のタグのみを対象としたいです。
そこで否定先読みで<td>と</td>の間の文字列でかつ、"<td>"に続かない
ものにマッチするという正規表現を書こうとしています。
現状では以下のような感じです。
$_ =<<DATA;
<td>データ1</td>
<td>
<tr>
<td>データ2</td>
</tr>
</td>
DATA
# 内側のテーブルタグのみにマッチさせたい
@res = /<td>(?![\s\w<>]+?<td>)[\s\S]+?<\/td>/gm; # こっちはOK
#@res = /<td>(?![\s\S]+?<td>)[\s\S]+?<\/td>/gm; # NG
分からないのはNGと書いた方が上手く動かない理由です。
現象としては、否定先読み条件の中の最短マッチが適用されていないように思います。
上の例ですと、データ2のみが取得されてしまいます。
修正方法を教えていただけないでしょうか。
レス数が900を超えています。1000を超えると表示できなくなるよ。