|
本帖最后由 niwawa 于 2016-4-24 01:14 AM 编辑
首先要搞清楚721乱码产生的原因:
trigger抓取并赋值不会产生乱码
对变量进行函数运算本身不会产生乱码
对上一步的运算结果再进行变量赋值就会产生乱码
来看一个简单的例子
触发行
突然起了一阵怪风,天珠被风一吹,朝着(*)方向滚了过去。
命令行
#var aaa "%1"
#var bbb %replace( @aaa, " ", "") //去掉aaa里面的随机空格
#if %ismember( @bbb, "丝绸之路") {#show test1 yes} {#show test1 no}
#if %ismember( %replace( @aaa, " ", ""), "丝绸之路") {#show test2 yes} {#show test2 no}
执行结果
突然起了一阵怪风,天珠被风一吹,朝着 丝 绸 之 路方向滚了过去。
test1 no
test2 yes
上面4条命令的执行结果说明,变量aaa不产生乱码,对变量aaa执行replace运算本身也不产生乱码(test2可证明),但将replace运算的结果赋值给bbb,则bbb产生乱码。
因此,写721机器时对中文变量应尽量少进行赋值操作,这样可减少乱码产生的可能性。
但是在写复杂机器的时候,有时不得不对中文变量进行运算并对结果进行赋值以便于后面调用,这时可用%regex函数来代替#var操作。
还是上面的例子
触发行
突然起了一阵怪风,天珠被风一吹,朝着(*)方向滚了过去。
命令行
#var aaa "%1"
#noop %regex( %replace( @aaa, " ", ""), "(.+)", bbb)
#if %ismember( @bbb, "丝绸之路") {#show test3 yes} {#show test3 no}
执行结果
突然起了一阵怪风,天珠被风一吹,朝着 丝 绸 之 路方向滚了过去。
test3 yes
%regex(s,regular-expression[,var1,var2,...varN,varN+1])这个函数是用正则表达式对字串s进行匹配,匹配的结果存储在变量var1~varN中
因此,%regex( %replace( @aaa, " ", ""), "(.+)", bbb) 这个命令即是用"(.+)"这个正则规则(即全部匹配)去匹配%replace( @aaa, " ", "")这个字串,匹配结果存储在变量bbb中。这个命令与 #var bbb %replace( @aaa, " ", "") 的意义是一样的,但却有效避免了变量bbb的乱码问题。
推而广之,对于#var 变量 函数表达式 这样的命令,都可以用#noop %regex(函数表达式,"(.+)", 变量) 来代替以避免乱码问题。
北大侠客行MUD,中国最好的MUD |
|