正则表达式抓取有效等级!!
现在要抓取 技能的有效等级,比如:内功 (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 编辑 ] 楼主应该用的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 编辑 ] 尝试了一下 [\S ](*)(\d+)$ 这个表达
mush里面报错了
刀法 (blade) : 无 有效等级: 40
拳法 (cuff) : 太极拳 有效等级:103
有效等级: 后面有时候有空格,有时候没有
[< ]* 的意思就是 []中的内容会被匹配0到N次么?
< ,< ,<< ,<< ,这些都应该会被匹配的吧
[ 本帖最后由 zztuzki 于 2011-4-22 07:54 PM 编辑 ] ^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ](.*)(\d+)$
那试试这个....我手上没系统,只是靠想的,抱歉 ^\s+内功\s\(force\)\s+[\S ]*[\w]*\s+有效等级[\S ](.*)(\d+)$
这个匹配出来了?1
其实很感谢小刀帮忙了,在论坛上搜索了许多答疑,有很多收获
说实话,发现技术贴每次回帖的很慢的说 ttk_09
[ 本帖最后由 zztuzki 于 2011-4-22 08:02 PM 编辑 ] ^\s*内功\s*\(force\).*有效等级[\S ]\s*(\d+)\s*$
[< ]* 的意思就是 []中的内容会被匹配0到N次么?
< ,< ,<< ,<< ,这些都应该会被匹配的吧
以下是你目前使用中的特殊技能
拳法 (cuff) : 无 有效等级: 40
轻功 (dodge) : 梯云纵 有效等级:143
这个不是命令行后的可以不考虑
[ 本帖最后由 mygame 于 2011-4-22 08:51 PM 编辑 ] 没测试可以试试
回复 6楼 的帖子
额,我引用[< ]* 的意思,是想表达[\S ]*是否也是同样的匹配?那么1 ,1,11 ,11,等等是否都匹配
另外[\S ]\s* ,[\S ]\s+,\S\s+ 都试过了,都不行
[ 本帖最后由 zztuzki 于 2011-4-22 08:59 PM 编辑 ] ^\s*内功\s*\(force\).*有效等级:(\d+)\s*$
这样就可以抓到了,好像冒号是全角的,这个问题?
回复 9楼 的帖子
额,对的,直接用全角冒号是对的但是技能等级低的时候,是有空格的,比如
拳法 (cuff) : 无 有效等级: 40
这样会更好一点 有效等级:\s*(\d+)
不知道为什么
我原来直接从mud里面截取下来的时候,用的就是冒号
不过当时是不行的,不知道是不是因为写成普通冒号了
其实是注意到了这个问题了,以为全角符号要另外处理
感谢各位了,小问题没仔细处理
[ 本帖最后由 zztuzki 于 2011-4-22 09:26 PM 编辑 ]
页:
[1]
2