北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: hba

正则表达式的问题。

[复制链接]
发表于 2010-4-4 18:41:23 | 显示全部楼层
呵呵 MUSH的正则对中文支持还是小有毛病的。。众所周知,GBK的编码是2字节。高字节位是x80-xFE,而低字节是x40-xFE,所以在低字节位可能会出现如(,),\,|,$等需要进行转义的字符。。

所以还是先点下转成正则表达式那个按纽比较安全。。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-4-4 18:44:36 | 显示全部楼层
原帖由 seagate 于 2010-4-4 05:38 PM 发表
加^和$都是为了强匹配,其实不用大多数情况下关系不大,只要你机器人有的触发特别要命的时候最好用^[> ]{0,2}TRIGGER$的形式圈起来,以防止出现问题。


同意,加^是为了防止别人chat导致误触发(当然,防不了to chat),加$一般意义不大,除非有的输出语句后面多出一部分,前面和别的语句完全一样
所以lz如果只是为了gag的话,要是我就写成
^[> ]*\(\s*你上一个动作还没有完成.*?不能施用
这样就行了,内外功也不用分别写成两条了
(中间把中文标点通配掉是个人习惯,以防wiz在开发时误用半角标点,heihei...)

[ 本帖最后由 purbam 于 2010-4-4 06:47 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-4-4 21:46:10 | 显示全部楼层
在咱们这个mud里我建议还是用
^(>\s)*开头,这个开头的含义是要从头开始匹配有0或多个">空格",这是为了防止系统多加">空格",当输入命令太快后mud吞掉命令客户端的反应是在行的开头出现">空格>空格"而不不是">>空格"。当然也可以防止别人chat触发了。
在行末不加$的原因是有的语句看上去是某个字或标点符号结束,其实有可能是在其后面还有个''空格'',这时加上这个$就不能正确匹配了,这种情况我遇到过。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-4-5 15:30:26 | 显示全部楼层
原帖由 danfeng 于 2010-4-4 09:46 PM 发表
在咱们这个mud里我建议还是用
^(>\s)*开头,这个开头的含义是要从头开始匹配有0或多个">空格",这是为了防止系统多加">空格",当输入命令太快后mud吞掉命令客户端的反应是在行的开头出现">空格>空格"而不不是">>空格 ...


丹枫所言即是,不过用[]还是比()好。因为()是代表可提取变量,在需提取变量的语句中,它将占了一个坑。
比较了一下myu和丹枫的开头其实是一样的,就是[]和()的区别,因此我建议用^[>\s]*开头。
至于$的用法,如purbam在32楼所说,既然是为了gag,则可以不强匹配了。但是为了触发其他语句,尤其如checkbusy(你不忙)这样的短语句触发,还是加$强匹配比较好。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2020-10-22 10:03:12 | 显示全部楼层
原来十年前的大佬们谈论的居然是如此基础的问题……………………哈哈哈哈啊哈
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 05:40 AM , Processed in 0.008699 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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