对正则表达式比较熟悉的请进

来源:百度知道 编辑:UC知道 时间:2024/05/21 10:49:50
比如一段文字:
<div class="artibody" id="artibody">犯得上犯得上大幅度撒法</div><div align="center">
</div>
<br>

我想取<div class="artibody" id="artibody"> 的</div>之间的东西,就是取 “犯得上犯得上大幅度撒法” 这几个字,
我用了:

$erg_mod = "<div class=\"artibody\" id=\"artibody\">(.*)<div>";
eregi($erg_mod, get_page_content("http://localhost/test/2008-02-25/123015013783.shtml"), $head);
echo $head[0];
取的结果是:<div class="artibody" id="artibody">犯得上犯得上大幅度撒法</div><div align="center">
</div>
并不是:<div class="artibody" id="artibody">犯得上犯得上大幅度撒法</div>

请问该如何进行匹配?
主要是还有其它的</div>,所以"<div class=\"

兄弟,应该用$head[1],我的验证语句如下:

<?php
$str='<div class="artibody" id="artibody">犯得上犯得上大幅度撒法</div>';
$erg_mod = "<div class=\"artibody\" id=\"artibody\">(.*)<\/div>";
eregi($erg_mod, $str, $head);
echo $head[1];
?>

补充:
确实是因为贪婪,如果(.*?)还是不可以解决问题,那么你不要使用epreg系列函数了,使用preg系列函数吧,我从来都用preg,因为它和PERL以及UNIX上其它各类语言的正则表达式相同。



.*是贪婪匹配,由于你的编程语言和我的不同。我只好帮你写几种正则来实现相同的效果:

<div class=\"artibody\" id=\"artibody\">(.*?)<div>

或者
>(.*?)<

或者

算了不写多了。。。免得把你搞糊涂。。。

建议自己看看正则表达式。。

限制匹配字符
(.*)换为([^\>]*)就解决了