喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【村长请吃饭啊】 ---北京诚聘--- 【你还在犹豫吗?】

上一主题 下一主题
     
标题: [问题] 请帮我理解正则:^([^<]*)(<[^>]+>[^<]*)*$  
 
zyfpb
注册会员
Rank: 2
初级会员



UID 64970
精华 0
积分 141
帖子 101
金钱 141 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-24
状态 离线
请帮我理解正则:^([^<]*)(<[^>]+>[^<]*)*$

<?php ereg("^([^<]*)(<[^>]+>[^<]*)*$", $str, $tags) ?>

这个例子,我看说明是用来匹配<>以外的字符,可是我总感觉不好理解,
请熟悉正则的人帮忙指教一下
第一个子表达式  ^([^<]*)   匹配任何不以 <  开头的0个或n个字符
第二个子表达式  (<[^>]+>[^<]*)*$   匹配用零个或n个  <  和  >  标记括起来的不是  >    的1个或n个字符 后面再加上不是  <   的0个或n个字符   的0个或n个字符作结尾

晕了........

我应该怎么理解第二个子表达式呢?

[ 本帖最后由 zyfpb 于 2008-3-9 10:36 PM 编辑 ]
2008-3-9 10:33 PM#1
查看资料  发短消息  顶部
 
zyfpb
注册会员
Rank: 2
初级会员



UID 64970
精华 0
积分 141
帖子 101
金钱 141 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-24
状态 离线
[推荐阅读] 强烈要求这个论坛每月举行版主选举大会
<?php
echo "<meta http-equiv=content-type content=\"text/html\; charset=gb2312\">";
$str="This <has> a <couple> of <tags> in it";
if (ereg("^([^<]*)(<[^>]+>[^<]*)*$", $str, $tags)){
         echo $tags[0]."<br>";
         echo $tags[1]."<br>";
         echo $tags[2]."<br>";
         }else{
          echo "没有匹配";
         }
?>
      输出:
   This a of in it
    This
    in it
真是晕了..............
2008-3-9 10:45 PM#2
查看资料  发短消息  顶部
 
abettor
新手上路
Rank: 1



UID 99882
精华 0
积分 17
帖子 17
金钱 17 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-10-24
状态 离线
[推荐阅读] 验证码 怎么和input绑定
我来胡诹两句:
(<[^>]+>[^<]*)*$

分两部分理解,括号里边和括号外边两部分:
*$ 表示结尾必须是“前边的表达式”重复0~n次

括号里边呢,两部分:
<[^>]+ 表示以<开头,后边跟着1~n个不是>的字符
>[^<]* 表示以>开头,后边跟着0~n个不是<的字符

于是,总的意思是要匹配这样的格式:Z个(<X个普通字符>Y个普通字符)
其中X>0,Y>=0,Z>=0

有谬误之处,请高手赐教。
2008-3-10 09:44 AM#3
查看资料  发短消息  顶部
 
abettor
新手上路
Rank: 1



UID 99882
精华 0
积分 17
帖子 17
金钱 17 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-10-24
状态 离线
[推荐阅读] PHP生成静态文件,文件名用的是类别名称(俄文),出现乱码
发现一个问题,

bool ereg ( string pattern, string string [, array regs] )
以区分大小写的方式在 string 中寻找与给定的正则表达式 pattern 所匹配的子串。

如果找到与 pattern 中圆括号内的子模式相匹配的子串并且函数调用给出了第三个参数 regs,则匹配项将被存入 regs 数组中。$regs[1] 包含第一个左圆括号开始的子串,$regs[2] 包含第二个子串,以此类推。$regs[0] 包含整个匹配的字符串。

这个函数会把括号里的子串分别放到输出参数里,而不是每个符合条件的所有情况。
2008-3-10 09:58 AM#4
查看资料  发短消息  顶部
 
zyfpb
注册会员
Rank: 2
初级会员



UID 64970
精华 0
积分 141
帖子 101
金钱 141 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-24
状态 离线
[推荐阅读] 如何采集ajax返回的结果
还是晕...........
请大家根据我二楼提供的例程详细讲解下
2008-3-10 01:12 PM#5
查看资料  发短消息  顶部
 
zyfpb
注册会员
Rank: 2
初级会员



UID 64970
精华 0
积分 141
帖子 101
金钱 141 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-24
状态 离线
[推荐阅读] 求助PDO 的事务问题_事务为什么不能完全撤销操作?
要到下一页了,自己顶下
2008-3-10 08:58 PM#6
查看资料  发短消息  顶部
 
lele729
注册会员
Rank: 2



UID 81901
精华 0
积分 69
帖子 41
金钱 69 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-10-20
状态 离线
[推荐阅读] 老板给少钱了?
自己对这方面也不是很了解啊
2008-3-10 10:23 PM#7
查看资料  Blog  发短消息  QQ  顶部
 
zyfpb
注册会员
Rank: 2
初级会员



UID 64970
精华 0
积分 141
帖子 101
金钱 141 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-24
状态 离线
[推荐阅读] 发现一张图
知道是什么问题了。
我从deerchao的博客获得了答案
请看:
对这个例程,我总是理解不透
为什么$tags[2]返回的是 in it
而不是 a 或者 of
你能详细地帮我理解
ereg("^([^<]*)(<[^>]+>[^<]*)*$", $str, $tags)
这个正则吗?

     

#199楼 [楼主] 2008-03-10 21:43 deerchao
@记事本
原教程中没有提到这一点.
当分组的后面加上了限定符(量词)之后,此分组会用来多次进行匹配,但是其捕获的值是最后一次匹配到的子字符串.

在.Net的正则表达式库里,还有个比Group更小的捕获单位:Capture. 每个Capture代表Group的一次匹配的结果.在这个例子里,Group[2]里包含了三个Capture,分别对应着"<has> a", "<couple> of" 和 "<tags> in it".

在PHP里我就不清楚有没有对应的东西,以及如果有的话,会叫什么了..      

#200楼  2008-03-10 22:36 记事本
啊,谢谢你,你的解释是完全正确的。
“当分组的后面加上了限定符(量词)之后,此分组会用来多次进行匹配,但是其捕获的值是最后一次匹配到的子字符串. ”
你的这句话让我想起了查看网页源文件,果然
$tags[2]返回的是 <tags>in it
只是输出为html页的时候没有显示 <tags> 而已。
详情请看这里:
http://www.cnblogs.com/deerchao/ ... zhongjiaocheng.html
2008-3-10 10:31 PM#8
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.025664 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP