robotdown 发表于 2013-12-4 20:34:55

2道难题,请教zmud721触发器中的短pattern精确控制问题(系统bug,已解决)

本帖最后由 robotdown 于 2013-12-6 04:17 AM 编辑

2013-12-06最终更新:已经搞定,特意百度搜索正则中\b的用法,结果发现闹了半天困扰我N久的问题原来是基本不存在的问题,真心崩溃- -
直接\bwest\b这样匹配就可以了……英文可以这样解决,但中文里面\b无效,就有待高人解决了,能精确界定英文单词已经基本够我使用了。

题目:
1、分别以north,northwest,west为pattern建立3条不同触发,要求三条触发能同时生效并且不互相干扰。
举例:屏幕上显示north时(任意位置,所以行首和行尾控制无效,下同),在屏幕上输出“北”(#show 北),显示northwest时输出“西北”,显示west时输出“西”。
在下所遇难点:长pattern好控制,比如northwest直接建立触发语句即可,但长pattern里包含的短pattern却会产生干扰,比如northwest触发西北,north触发北,但是northwest里包含的“north”还会触发一次北产生干扰,个人苦思良久,好在zmud721支持正则表达式,所以使用正则表达式中的\b通配符,把north的pattern写成north\b可以解决northwest中的north干扰问题,但问题又来了,northwest里还包含一个west,会对west的正常触发造成干扰,我看到的正则教程帖中说“\b通配单词的开头或者结尾”,所以我用north\d通配结尾解决了north的干扰问题,但northwest中的west应该是使用\d的通配开头功能,但通配开头的结尾我不会写,写成\bnorth会造成干扰(成了bnorth单词了……),所以诚心请教\b通配单词开头的写法。
2、如果1的问题能够解决,那么题目换成汉字短触发,分别以北,西北,西为pattern建立3条不同触发,要求三条触发能同时生效并且不互相干扰。比如屏幕上显示北时输出north,显示西北时输出northwest,显示西时输出west……经本人测试,正则中的\d无法判断汉字的结尾,所以比题1难度更大……此题有解么?(可以用正则表达式)

疑问总结:
1、正则中\b匹配单词的开头应该怎么写代码?
2、用正则能不能实现这样一种带字符长度匹配功能(暂定一个汉字2个字符,一个英文字母或数字等1个字符):北(2)表示匹配含北的2个字符的pattern,这样通过字符长度控制就可以避免诸如西北(西北2个汉字4个字符)中的北对单个北的干扰。同理,north(5)来避免northwest的干扰。
看了下正则通配符,里面有个长度匹配{n},但试了一下里面的长度匹配应该是匹配未确定内容的相关数量字符(比如north{5}匹配的是north后面再加上5个字符),但现在需要的是控制已知字符内容的长度,在下苦思无解- -,特向各路高手求助。
3、或者可有其他方法可以实现避免被包含短词语的触发干扰问题?

2013-12-05更新:看了几位朋友的回帖,本人表示很汗。主要问题应该还是我没说明白。特在此作下补充:
1、在下所说的可以用正则表达式主要是在pattern匹配部分可以用正则表达式,至于pattern匹配后触发的指令里最好不用其他脚本,因为我对脚本了解非常有限,而且貌似zmud721里也不支持其他脚本。
2、至于我所想是想的功能是这样的:看zmud721帮助文件,介绍721支持mxp,并且举了几个应用例子,在下便突发奇想,想通过在zmud721客户端编写触发来实现鼠标化操作。先要搞定的是鼠标行走,一般mud中的出口描述是这样:这里明显的出口是north,northwest和west(仅以此情况举例)。通过mxp写个触发,当屏幕上出现方向就给该方向加个mxp的send触发,那么该方向就带有了超链接功能,直接鼠标点击即可进行行走。此功能实现后还可以进一步给其他功能加上鼠标链接触发,实现基于客户端的mud鼠标化操作。但是问题是会出现前文所述触发干扰,northwest这种的点击单词的后半部分会触发west的w而不是整个单词应该触发的nw。
思路就是这样。附上mxp加触发(重点就是红色的那一句):
Using MXP in the #SUBSTITUTE command

Instead of using the #MXP command to send Secure MXP commands to the screen, you can also create a trigger and then use the #SUBSTITUTE command to add MXP commands to the text.For example,

#TRIGGER {north} {#SUB {~<send>north~</send>}}

will replace the word "north" whenever it is displayed by the MUD and replace it with the text <send>north</send> which creates a hyperlink.If you click on the "north" hyperlink, the command "north" is sent to the MUD.

北大侠客行MUD,中国最好的MUD

pizzagoo 发表于 2013-12-5 08:18:01

提供另一个思路:
先优先匹配northwest的触发,在匹配north的触发
在mush中,触发有序号可以确定匹配顺序,而且如果触发语句不选择保持有效性,匹配成功后,就无法在触发后续的匹配了,不知道zmud中是否有相同的功能

robotdown 发表于 2013-12-5 11:26:34

本帖最后由 robotdown 于 2013-12-5 03:28 AM 编辑

回复 2# huacuoh

功能思路已经补充在帖子末尾。请帮忙提出解决方案。

robotdown 发表于 2013-12-5 11:28:24

回复 4# yhzzyahoo


    功能思路已经补充在原帖末尾,请看下能否实现。你说的多次匹配我还得去研究一下,机器人新手,在对照帮助文件边看边学……

robotdown 发表于 2013-12-5 11:30:10

回复 5# pizzagoo


    mush完全不会用。请看看本文末尾补充内容,如果能提供mush解决思路在下也可以在zmud中参考一下。

robotdown 发表于 2013-12-6 11:54:20

本帖最后由 robotdown 于 2013-12-6 04:15 AM 编辑

回复 9# huacuoh


    试了下不行,还有干扰,而且会把分隔符忽略,
比如“这里的出口是north,northwest和west”会变成
“这里的出口是northnorthwestwest”……

我看的正则讲解里有这么一句:
\b        匹配单词的开始或结束
想问下正则里\b匹配单词的开始和结束应该怎么写?

已经基本解决。看开头更新。sign。

robotdown 发表于 2013-12-6 12:10:52

崩溃了,我想我已经搞定了,直接\b匹配就可以了。
前面\b报错,今天再试居然成功了,神奇的系统伤不起啊……
页: [1]
查看完整版本: 2道难题,请教zmud721触发器中的短pattern精确控制问题(系统bug,已解决)