这是要匹配的内容:
<dl>
<dt>2013</dt>
<dd>row1</dd>
<dd>row2</dd>
<dd>row3</dd>
</dl>
<dl>
<dt>2014</dt>
<dd>row1</dd>
<dd>row2</dd>
</dl>
要匹配dl,并且匹配dl下的dt,和所有的dd,我是这样写的:<dl>\s+<dt>(.*?)</dt>(\s+<dd>(.*?)</dd>\s+)*?</dl>但是这个匹配出的结果不太对,dd始终只匹配到了最后一个。这个表达式应该怎么修改呢?正则
<dl>
<dt>2013</dt>
<dd>row1</dd>
<dd>row2</dd>
<dd>row3</dd>
</dl>
<dl>
<dt>2014</dt>
<dd>row1</dd>
<dd>row2</dd>
</dl>
要匹配dl,并且匹配dl下的dt,和所有的dd,我是这样写的:<dl>\s+<dt>(.*?)</dt>(\s+<dd>(.*?)</dd>\s+)*?</dl>但是这个匹配出的结果不太对,dd始终只匹配到了最后一个。这个表达式应该怎么修改呢?正则
<dl>
<dt>2013</dt>
<dd>row1</dd>
<dd>row2</dd>
<dd>row3</dd>
</dl>
<dl>
<dt>2014</dt>
<dd>row1</dd>
<dd>row2</dd>
</dl>
HTML;
preg_match_all('#<dl>.+</dl>#isU', $s, $r);
print_r($r);Array
(
[0] => Array
(
[0] => <dl>
<dt>2013</dt>
<dd>row1</dd>
<dd>row2</dd>
<dd>row3</dd>
</dl>
[1] => <dl>
<dt>2014</dt>
<dd>row1</dd>
<dd>row2</dd>
</dl>
))
print_r($r);Array
(
[0] => Array
(
[0] => <dt>2013</dt>
[1] => <dd>row1</dd>
[2] => <dd>row2</dd>
[3] => <dd>row3</dd>
[4] => <dt>2014</dt>
[5] => <dd>row1</dd>
[6] => <dd>row2</dd>
) [1] => Array
(
[0] => dt
[1] => dd
[2] => dd
[3] => dd
[4] => dt
[5] => dd
[6] => dd
) [2] => Array
(
[0] => 2013
[1] => row1
[2] => row2
[3] => row3
[4] => 2014
[5] => row1
[6] => row2
))
谢谢版主啦。解决问题了,不过改用的是dom,不过请版主解释一下你那个表达式呗
<(d[dt])>\s*([^<]+)</\\1>
这个</\\1>不是太懂哦,谢谢
这就是向后引用