pdm 发表于 2009-6-28 21:14:31

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

想过滤所有包含全角句号的字串,比如:

你死了。
某人走了过来。

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

但是发现:

中央广场
比武场

这些字串没带句号也被过滤掉了。
有没更好的匹配方法?

jason 发表于 2009-6-28 21:39:22

不知道你用的什么正则,一般的来说 [^。]{1,20} 表示匹配不包含。和空格,其他字符出现1到20此。
所以中央广场能匹配上

pdm 发表于 2009-6-28 21:55:04

还真不好描述,我是在mush中用的正则,完整的trigger是这样的:
<triggers>
<trigger
   enabled="y"
   group="system"
   keep_evaluating="y"
   match="^(&gt;*\s{0,1})([^。\[\]\?&gt;;:()+-.,]{1,20})$"
   name="test"
   regexp="y"
   script=""
   sequence="100"
>
</trigger>
</triggers>
从测试结果看
就是:
中央广场
比武场
也没有办法触发。

pdm 发表于 2009-6-28 21:56:39

居然出了笑脸,重贴一个:
^(>*\s{0,1})([^。\[\]\?>;:()+-.,]{1,20})$

pdm 发表于 2009-6-28 21:59:11

如果把表达式中句号去掉,就能触发了。
说明是句号的问题。
我说的“过滤”,是“不匹配”的意思,用词不当了。

[ 本帖最后由 pdm 于 2009-6-28 10:05 PM 编辑 ]

chengsan 发表于 2009-6-28 22:12:22

似乎很复杂
如果你急用,可以暂时用zmud顶着,很简单的一个tr就能解决
#gag {。$}
表示任何以句号为末尾的行,全部#gag屏蔽掉

pdm 发表于 2009-6-28 22:50:17

zmud对中文的支持更差了,当时转mush,就是这个原因。

duno 发表于 2009-6-29 06:28:30

匹配 .*。.*
triggerOption:omit_from_output=1
把带句号的行从 output里 omit掉

。在mush底层被认为是两个字符(字节),所以[。]匹配两个字符,当其他汉字编码也包含有这两个字节中的一个时,[。]就会匹配
所以要用“。”表示一个连续的字串,否则可能匹配其他双字节字符

pdm 发表于 2009-6-29 22:06:10

确实,句号和“场”字都有一个0xA1。
但是不能用omint选项,因为我只是不想让带句号的行触发这个trigger,而不是要去除这个带句号的行的显示。

duno 发表于 2009-6-29 22:13:50

if not string.match ("%0","。") then
    blah...blah
end
页: [1] 2
查看完整版本: 求一个过滤全角句号的正则表达式