北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 6658|回复: 12

正则表达式抓取有效等级!!

[复制链接]
发表于 2011-4-22 19:12:35 | 显示全部楼层 |阅读模式
现在要抓取 技能的有效等级,比如:
  内功 (force)                : 太极神功              有效等级:110

用这个:
^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ]*(\d+)$
只能抓取到最后的0

而这个表达式:
^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ]*(\d\d\d)$
就能抓取到110

问题:
1.\d+ 不是能匹配1个以上的数字么??现在只能抓取1个数字这是怎么回事
2.原文中有全角字符冒号 :   
        为什么用[\S]*\s+就不能抓取?
        全角字符还有没有其他的抓取方法?

解决:
^\s*(.*)\s*\((\w+)\)\s*:\s*(\S+)\s*有效等级:\s*(\d+)\s*$


ps:忘记说了,用的MUSH
发现MUSH才能稳定的挂机练功,初学初学

[ 本帖最后由 zztuzki 于 2011-4-22 09:32 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-22 19:38:44 | 显示全部楼层
楼主应该用的mush吧?以后问技术类的问题之前,最好先说一下自己的客户端

^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ]*(\d+)$
-----以上楼主写错了,试看看把那个*去掉

类似
^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ](\d+)$

因为手上没有系统,无法调试,纯粹是用想的.
楼主出错的问题,是对正则的算法理解有误.那个*把后面的数字也计算进去了,所以最后你才取了一个数字.你可以尝试用

^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ](*)(\d+)$
看一下结果.

呃....正则是比较复杂的一个东西,我表达的可能不怎么好,希望对你有帮助

[ 本帖最后由 lzkd 于 2011-4-22 07:41 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-4-22 19:46:22 | 显示全部楼层
尝试了一下    [\S ](*)(\d+)$ 这个表达
mush里面报错了


  刀法 (blade)                : 无                    有效等级: 40
  拳法 (cuff)                 : 太极拳                有效等级:103
有效等级: 后面有时候有空格,有时候没有

[< ]* 的意思就是 []中的内容会被匹配0到N次么?
< ,<   ,<< ,<<   ,这些都应该会被匹配的吧

[ 本帖最后由 zztuzki 于 2011-4-22 07:54 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
回复 支持 1 反对 0

使用道具 举报

发表于 2011-4-22 19:49:22 | 显示全部楼层
^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ](.*)(\d+)$

那试试这个....我手上没系统,只是靠想的,抱歉
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-4-22 19:58:43 | 显示全部楼层
^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ](.*)(\d+)$
这个匹配出来了?1

其实很感谢小刀帮忙了,在论坛上搜索了许多答疑,有很多收获
说实话,发现技术贴每次回帖的很慢的说

[ 本帖最后由 zztuzki 于 2011-4-22 08:02 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-22 20:41:10 | 显示全部楼层
^\s*内功\s*\(force\).*有效等级[\S ]\s*(\d+)\s*$

[< ]* 的意思就是 []中的内容会被匹配0到N次么?
< ,<   ,<< ,<<   ,这些都应该会被匹配的吧


以下是你目前使用中的特殊技能
  拳法 (cuff)                 : 无                    有效等级: 40
  轻功 (dodge)                : 梯云纵                有效等级:143

这个不是命令行后的可以不考虑

[ 本帖最后由 mygame 于 2011-4-22 08:51 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-22 20:41:23 | 显示全部楼层
没测试可以试试
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-4-22 20:54:18 | 显示全部楼层

回复 6楼 的帖子

额,我引用[< ]* 的意思,是想表达[\S ]*是否也是同样的匹配?
那么1 ,1  ,11 ,11  ,等等是否都匹配

另外[\S ]\s*   ,[\S ]\s+,\S\s+ 都试过了,都不行

[ 本帖最后由 zztuzki 于 2011-4-22 08:59 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-22 21:02:20 | 显示全部楼层
^\s*内功\s*\(force\).*有效等级:(\d+)\s*$

这样就可以抓到了,好像冒号是全角的,这个问题?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-4-22 21:08:21 | 显示全部楼层

回复 9楼 的帖子

额,对的,直接用全角冒号是对的
但是技能等级低的时候,是有空格的,比如
  拳法 (cuff)                 : 无                    有效等级: 40

这样会更好一点 有效等级:\s*(\d+)

不知道为什么
我原来直接从mud里面截取下来的时候,用的就是冒号
不过当时是不行的,不知道是不是因为写成普通冒号了
其实是注意到了这个问题了,以为全角符号要另外处理

感谢各位了,小问题没仔细处理

[ 本帖最后由 zztuzki 于 2011-4-22 09:26 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-1 09:28 PM , Processed in 0.010157 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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