北大侠客行MUD论坛

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

求一个过滤全角句号的正则表达式

[复制链接]
发表于 2009-6-28 21:14:31 | 显示全部楼层 |阅读模式
想过滤所有包含全角句号的字串,比如:

你死了。
某人走了过来。

我写的是:
[^。]{1,20}

但是发现:

中央广场
比武场

这些字串没带句号也被过滤掉了。
有没更好的匹配方法?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-6-28 21:39:22 | 显示全部楼层
不知道你用的什么正则,一般的来说 [^。]{1,20} 表示匹配不包含。和空格,其他字符出现1到20此。
所以中央广场能匹配上
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-6-28 21:55:04 | 显示全部楼层
还真不好描述,我是在mush中用的正则,完整的trigger是这样的:

      enabled="y"
   group="system"
   keep_evaluating="y"
   match="^(>*\s{0,1})([^。\[\]\?>;:()+-.,]{1,20})$"
   name="test"
   regexp="y"
   script=""
   sequence="100"
  >
  

从测试结果看
就是:
中央广场
比武场
也没有办法触发。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-6-28 21:56:39 | 显示全部楼层
居然出了笑脸,重贴一个:
^(>*\s{0,1})([^。\[\]\?>;:()+-.,]{1,20})$
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-6-28 21:59:11 | 显示全部楼层
如果把表达式中句号去掉,就能触发了。
说明是句号的问题。
我说的“过滤”,是“不匹配”的意思,用词不当了。

[ 本帖最后由 pdm 于 2009-6-28 10:05 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-6-28 22:12:22 | 显示全部楼层
似乎很复杂
如果你急用,可以暂时用zmud顶着,很简单的一个tr就能解决
#gag {。$}
表示任何以句号为末尾的行,全部#gag屏蔽掉
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-6-28 22:50:17 | 显示全部楼层
zmud对中文的支持更差了,当时转mush,就是这个原因。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-6-29 06:28:30 | 显示全部楼层
匹配 .*。.*
triggerOption:omit_from_output=1
把带句号的行从 output里 omit掉

。在mush底层被认为是两个字符(字节),所以[。]匹配两个字符,当其他汉字编码也包含有这两个字节中的一个时,[。]就会匹配
所以要用“。”表示一个连续的字串,否则可能匹配其他双字节字符
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-6-29 22:06:10 | 显示全部楼层
确实,句号和“场”字都有一个0xA1。
但是不能用omint选项,因为我只是不想让带句号的行触发这个trigger,而不是要去除这个带句号的行的显示。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-6-29 22:13:50 | 显示全部楼层
if not string.match ("%0",  "。") then
    blah...blah
end
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 10:11 PM , Processed in 0.010945 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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