北大侠客行MUD论坛

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

mushclient高手,正则表达式高手请进

[复制链接]
发表于 2008-1-22 16:28:34 | 显示全部楼层 |阅读模式
【闲聊】天恒(Tianheng):【 气血 】 481   / 481    100%  【 内力 】 870   / 630   (+   0)
正则表达式:^【\s*(.*)\s*】(.*)
目标:%1=闲聊 %2=天恒(Tianheng):【 气血 】 481   / 481    100%  【 内力 】 870   / 630   (+   0)
但实际上上面的正则表达式 %1=闲聊】天恒(Tianheng):【 气血 】 481   / 481    100%  【 内力  %2= 870   / 630   (+   0)


七块红烧牛肉(Hongshao niurou)
正则表达式:^[(.*)[块]*]*红烧牛肉(Hongshao niurou)
目标是通过%1取出七,但实际上匹配不到

请高手帮忙完善解决!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2008-1-22 16:34:17 | 显示全部楼层
【闲聊】天恒(Tianheng):【 气血 】 481   / 481    100%  【 内力 】 870   / 630   (+   0)
正则表达式:^【\s*(.*)\s*】?(.*)

这样是否可以?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-1-22 18:23:58 | 显示全部楼层
查帮助在看
仅仅看了某“正则表达式”的部分
mushclient没研究还
请问你的(.*)是相当于zmud里的(*)么?
在帮助里,点(就是.)还有星(就是*)都是有特殊意义的
*         匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。
.          匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
也许带了括号就不同了?呵呵
你的\s是代表空格,而\s*代表0-n个空格,是么?
不过貌似这里没空格的说......不行你把他们去掉试试?

跟着学习,等高手
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-1-22 20:25:58 | 显示全部楼层
【闲聊】天恒(Tianheng):【 气血 】 481   / 481    100%  【 内力 】 870   / 630   (+   0)

trigger:
^.*【(.*)】(.*)\((.*)\):(.*)$

%1=闲聊
%2=天恒
%3=Tianheng
%4=【 气血 】 481   / 481    100%  【 内力 】 870   / 630   (+   0)


满意了吧。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-1-22 20:48:11 | 显示全部楼层
七块红烧牛肉(Hongshao niurou)

正则匹配:
^(.*)块红烧牛肉\(Hongshao niurou\)$
%1=七
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-1-22 21:03:53 | 显示全部楼层
跟着分析
^.*是代表顶格触发,或者有任意个(0-n)的非\n的字节在前面触发。
*         匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。
看来*的前面如果是通配符则要求他们的“值”必须一致,而不能有区别,比如\d*应该可以匹配00,11,222,但123是不行的。
事实上,在mud里,前面最多有个>吧,直接写^>*不行么?
剩下的就没什么疑问了,只是不知道(.*)怎么用正则式来解释,或者他和正则式无关,是mus的命令?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-1-22 21:19:17 | 显示全部楼层
红烧肉的,分析下楼主的吧
^[(.*)[块]*]*红烧牛肉(Hongshao niurou)
这里的两个]*不知道该怎么算,理论上可以算0-n个]的,但我们又有
[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。  
如果算0个],那前面的[就只能算普通字符,如果算1个],就算字符集合了......到底是怎么回事呢
这么问吧,如何区别匹配里的“普通字符”和“特殊字符”呢?比如[,什么时候是普通的[,什么时候是有含义的呢?总不能在前面加\吧......
举个例子,加入服务器有如下语句
[7]块红烧牛肉
想抓7,是不是应该写成
^[(.*)]块红烧牛肉
那如果想如果是7或8或9块就触发,否则不触发的话,该怎么写呢?
^[[789]]块红烧牛肉
这样?
请教
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2008-1-23 09:24:39 | 显示全部楼层
原帖由 iever 于 2008-1-22 08:48 PM 发表
七块红烧牛肉(Hongshao niurou)

正则匹配:
^(.*)块红烧牛肉\(Hongshao niurou\)$
%1=七


匹配两块(含两块)这个没有问题,一块的情况呢,考虑没有?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2008-1-23 09:27:16 | 显示全部楼层
原帖由 iever 于 2008-1-22 08:25 PM 发表
【闲聊】天恒(Tianheng):【 气血 】 481   / 481    100%  【 内力 】 870   / 630   (+   0)

trigger:
^.*【(.*)】(.*)\((.*)\):(.*)$

%1=闲聊
%2=天恒
%3=Tianheng
%4=【 气血 】 481   / 481    100 ...

这个抓聊天的确实没有问题,但像天气、系统公告等呢,就不行了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2008-1-23 09:50:33 | 显示全部楼层
chat* wave
【闲聊】找乐子挥了挥手。(wave)

这样的也应该匹配不到
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 02:47 PM , Processed in 0.011199 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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