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

RSS 订阅当前论坛  

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

上一主题 下一主题
     
标题: [问题] 请教个正则的问题  
 
阿文2 (阿文2)
新手上路
Rank: 1
初级会员



UID 66998
精华 0
积分 37
帖子 21
金钱 37 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-9-28
状态 离线
请教个正则的问题

代码如下:
--------------------------------------------------
$test="<a href=\"member.php?s=a3b4d5e6&u=123456\">abcd</a>";
preg_match("/<a href=\"member.php\?s=(.+)&u=(\b\d+)\">(.+)<\/a>/",$test,$arr);
print_r($arr);
echo "<br />";
preg_match("/<a href=\"member.php\?s=(.+)&u=(^\d+)\">(.+)<\/a>/",$test,$arr2);
print_r($arr2);

为何$arr有输出而$arr2却没有输出?按理^和\b是应是等价的吧?为何把\b改为^就没有了输出?
2008-5-13 11:31 AM#1
查看资料  Blog  发短消息  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2492
帖子 4640
金钱 2489 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 推荐一篇js好文--《悟透JavaScript》
“^”什么时候和“\b”等价了?
“^”匹配整个结果的开始 “\b”匹配单词边缘 虽然匹配长度都是0 但完全不是等价的




最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2008-5-13 01:11 PM#2
查看资料  Blog  发短消息  顶部
 
coolhpy
注册会员
Rank: 2



UID 70642
精华 0
积分 141
帖子 128
金钱 141 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-3-29
来自 浙江
状态 离线
[推荐阅读] 我不想我的页面被人包含进他们的框架
^ 也有“非”的意思
[^a]  就表示非字母a的任何字符




http://www.hpyer.cn
2008-5-14 12:45 PM#3
查看资料  访问主页  Blog  发短消息  顶部
 
阿文2 (阿文2)
新手上路
Rank: 1
初级会员



UID 66998
精华 0
积分 37
帖子 21
金钱 37 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-9-28
状态 离线
[推荐阅读] 提个建议


QUOTE:
原帖由 sanders_yao 于 2008-5-13 01:11 PM 发表
“^”什么时候和“\b”等价了?
“^”匹配整个结果的开始 “\b”匹配单词边缘 虽然匹配长度都是0 但完全不是等价的
————————————————————
此话怎讲?是不是^的使用只能是"/^abc/",而不能是"/ab^c/"或"/a^bc/",也就是说^只能放在开头?

试过
$test1="u=123456";
preg_match("/u=^\d+/",$test1,$res1);
print_r($res1);

没有输出。而

preg_match("/^u=\d+/",$test1,$res1);

就有输出。

到底是不是这样?请大家指教。
2008-5-14 05:15 PM#4
查看资料  Blog  发短消息  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2492
帖子 4640
金钱 2489 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 一开电脑就想睡觉,一关机就来精神
并非只能放到开头 仅仅是匹配开头位置 你也可以通过枚举条件放到中间如:/(a|b|c|^)d/匹配 ad、bd、cd和d但是不匹配ed



最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2008-5-14 06:07 PM#5
查看资料  Blog  发短消息  顶部
 
未注册会员
注册会员
Rank: 2



UID 71886
精华 0
积分 87
帖子 178
金钱 87 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-4-18
来自 广东
状态 在线
[推荐阅读] 再请教一个飙汗的时间问题,在线累计时间
^在[]内作取非用



80字节以内  
2008-5-14 10:56 PM#6
查看资料  发短消息  顶部
 
阿文2 (阿文2)
新手上路
Rank: 1
初级会员



UID 66998
精华 0
积分 37
帖子 21
金钱 37 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-9-28
状态 离线
[推荐阅读] 低薪诚聘PHP程序员(广州)
其实我也知道我的代码是画蛇添足的。
其实只要

$test1="u=123456";
preg_match("/u=\d+/",$test1,$res1);
print_r($res1);

就可以了。

我只是想知道我到底错在哪里?

想知道如果/(a|b|c|^)d/翻译过来是:匹配a或b或c开头,后边紧近d字母的字符串。

那么/(a|b|c)^d/翻译过来的意思又是什么?因这个是没有返回的。但我觉得它和/(a|b|c|^)d/是等价的,到底错在那里?请指教.
2008-5-16 08:50 AM#7
查看资料  Blog  发短消息  顶部
     


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


 


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

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