找回密码
 加入
搜索
查看: 2484|回复: 6

[效率算法] [已解决]请教个正则捕获组的问题

  [复制链接]
发表于 2012-2-13 17:36:09 | 显示全部楼层 |阅读模式
本帖最后由 kxing 于 2012-2-13 20:40 编辑

为什么下述代码会出现三个捕获组,而我只用了两个括号。
另外为什么$array[1]第二个元素会出现空的现象。
麻烦正则高手指点!!!
多谢!!!!
$s='123-abc-我爱你'
$exp=stringregexp($s,"(\d+)|([a-z]+)",3)
msgbox(0,ubound($exp),$exp[0]&$exp[2])
 楼主| 发表于 2012-2-13 17:37:03 | 显示全部楼层
本帖最后由 kxing 于 2012-2-13 17:48 编辑

这个 | 不是或者的意思吗
按我理解来讲应该是捕获出两个结果啊。
$a[0]=123,$a[1]='abc'
发表于 2012-2-13 18:29:21 | 显示全部楼层
因为你两边都是组,这样会流出一个“空隙”给“|”的另一方,如果只有一边是组
(\d+)|[a-z]+ 或者 \d+|([a-z]+)
或者两边都不是组
\d+|[a-z]+
就不会捕获这个空隙

评分

参与人数 1金钱 +20 收起 理由
user3000 + 20 学习了, 今天才知道原因....

查看全部评分

 楼主| 发表于 2012-2-13 18:43:47 | 显示全部楼层
但是我想同时捕获\d+和[a-z]该怎么做呢
当然这是两个完全不同的正则表达式,这里的123|abc只是方便举例而已。
发表于 2012-2-13 18:56:15 | 显示全部楼层
回复 4# kxing


    示例要捕获什么
发表于 2012-2-13 19:33:58 | 显示全部楼层
但是我想同时捕获\d+和[a-z]该怎么做呢
当然这是两个完全不同的正则表达式,这里的123|abc ...
kxing 发表于 2012-2-13 18:43
$exp=stringregexp($s,"([\da-z]+)",3)
; 或者
$Exp = StringRegExp($s, '(\d+)-([a-z]+)', 3)
用两个括号来捕获多个分组的, 必须指出两个分组之间有什么字符!

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2012-2-13 20:39:42 | 显示全部楼层
我已经解决了,多谢两位!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-19 14:30 , Processed in 0.081146 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表