免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2328 | 回复: 2
打印 上一主题 下一主题

PHP4的正则表达式不贪婪疑问(在线急等) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-19 23:49 |只看该作者 |倒序浏览
我想取下面这串字符中的第一个IMG中的SRC内容(即/news/txtimage/62206-1.jpg),但却取了最后一个IMG的",请问怎么让其不贪婪?使用的是PHP4.谢谢各位。
$head='<IMG height=378 src="/news/txtimage/62206-1.jpg" width=570 border=0></A></TD></TR>
<TR>
<TD class=textthick1 align=middle>aaa</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=5 cellPadding=0 width="80%" border=0>
<TBODY>
<TR>
<TD align=middle><A href="/news/txtimage/62206-2.jpg" target=_blank><IMG height=409 src="/news/txtimage/62206-2.jpg" width=570 border=0></A></TD></TR>
<TR>
<TD class=textthick1 align=middle>bbb</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=5 cellPadding=0 width="80%" border=0>
<TBODY>
<TR>
<TD align=middle><A href="/news/txtimage/62206-3.jpg" target=_blank><IMG height=294 src="/news/txtimage/62206-3.jpg" width=570 border=0>';

eregi("src=\"(.*)\"",$head,$reg);
或eregi("src=\"(.*?)\"",$head,$reg);
第一种取得太多了,第二种却取不出任何内容,是PHP4不支持吗?

论坛徽章:
0
2 [报告]
发表于 2010-05-20 11:06 |只看该作者
都什么年代了,还在用php4啊
先换成php5再说啊。

论坛徽章:
0
3 [报告]
发表于 2010-06-03 11:46 |只看该作者
一般情况下,正则表达式的匹配是贪婪模式的,比如下面这个例子:

字符串:....src="http://www.bloghome.cn/1.mp3" type="application/x-mplayer2" ....
要求的结果:http://www.bloghome.cn/1.mp3

如果匹配表达式写为:/src="(.*)"/,则得不到正确的结果,因为最后一个双引号的匹配是贪婪模式的。

解决办法:匹配表达式写为:
/src="(.*)".?/

上面表达式中,".?是非贪婪模式匹配。也就是说,只要在一个字符后面跟上限定个数的特殊字符,匹配就是非贪婪模式了。

在php中
  1. <?php   
  2. $str = 'src="http://www.bloghome.cn/1.mp3" type="application/x-mplayer2" src="sfsfaasdfsfd.jpg"';   
  3. preg_match_all('/src="(.*)"/U', $str, $arr);   
  4.    
  5. print_r($arr);   
  6. ?>   
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP