求一个过滤全角句号的正则表达式
想过滤所有包含全角句号的字串,比如:你死了。
某人走了过来。
我写的是:
[^。]{1,20}
但是发现:
中央广场
比武场
这些字串没带句号也被过滤掉了。
有没更好的匹配方法? 不知道你用的什么正则,一般的来说 [^。]{1,20} 表示匹配不包含。和空格,其他字符出现1到20此。
所以中央广场能匹配上 还真不好描述,我是在mush中用的正则,完整的trigger是这样的:
<triggers>
<trigger
enabled="y"
group="system"
keep_evaluating="y"
match="^(>*\s{0,1})([^。\[\]\?>;:()+-.,]{1,20})$"
name="test"
regexp="y"
script=""
sequence="100"
>
</trigger>
</triggers>
从测试结果看
就是:
中央广场
比武场
也没有办法触发。 居然出了笑脸,重贴一个:
^(>*\s{0,1})([^。\[\]\?>;:()+-.,]{1,20})$ 如果把表达式中句号去掉,就能触发了。
说明是句号的问题。
我说的“过滤”,是“不匹配”的意思,用词不当了。
[ 本帖最后由 pdm 于 2009-6-28 10:05 PM 编辑 ] 似乎很复杂
如果你急用,可以暂时用zmud顶着,很简单的一个tr就能解决
#gag {。$}
表示任何以句号为末尾的行,全部#gag屏蔽掉 zmud对中文的支持更差了,当时转mush,就是这个原因。 匹配 .*。.*
triggerOption:omit_from_output=1
把带句号的行从 output里 omit掉
。在mush底层被认为是两个字符(字节),所以[。]匹配两个字符,当其他汉字编码也包含有这两个字节中的一个时,[。]就会匹配
所以要用“。”表示一个连续的字串,否则可能匹配其他双字节字符 确实,句号和“场”字都有一个0xA1。
但是不能用omint选项,因为我只是不想让带句号的行触发这个trigger,而不是要去除这个带句号的行的显示。 if not string.match ("%0","。") then
blah...blah
end
页:
[1]
2