freeway 发表于 2011-10-8 11:55:31

MUSH Note replace 回车 的问题

<alias   
match="ss"   
enabled="y"   
send_to="12"   
sequence="100">
<send>
local test_str='今天\n天气\n真好'
Note (replace(test_str,'\n', '\\n'))
</send>
</alias>

执行 ss

Immediate execution:1: unfinished string near '"今天'replace(),

怎么才能成功替换字符串中的\n为 \\n ,用Note输出呢


论坛也不让输入\\nttk_09

[ 本帖最后由 freeway 于 2011-10-8 01:11 PM 编辑 ]

freeway 发表于 2011-10-8 12:46:32

字符串既可以用一对单引号引起,也可以是双引号,里面还可以包含类似 C 的转义符: '\a' (响铃), '\b' (退格), '\f' (表单), '\n' (换行), '\r' (回车), '\t' (横向制表), '\v' (纵向制表), '\\' (反斜杠), '\"' (双引号),以及 '\'' (单引号)。而且,如果在一个反斜杠后跟了一个真正的换行符,其结果就是在字符串中产生一个换行符。我们还可以用反斜杠加数字的形式 \ddd 来描述一个字符。这里, ddd 是一串最多三位的十进制数字。(注意,如果需要在这种描述方法后接一个是数字的字符,那么反斜杠后必须写满三个数字。)Lua 中的字符串可以包含任何 8 位的值。包括用 '\0' 表示的零。

只有在你需要把不同的引号、换行、反斜杠、或是零结束符这些字符置入字符串时,你才必须使用转义符。别的任何字符都可以直接写在文本里。(一些控制符可以会影响文件系统造成某些问题,但是不会引起 Lua 的任何问题。)

字符串还可以用一种长括号括起来的方式定义。我们把两个正的方括号间插入 n 个等号定义为第 n 级正长括号。就是说,0 级正的长括号写作 [[ ,一级正的长括号写作 [=[ ,如此等等。反的长扩展也作类似定义;举个例子,4 级反的长括号写作 ]====] 。一个长字符串可以由任何一级的正的长括号开始,而由第一个碰到的同级反的长括号结束。整个词法分析过程将不受分行限制,不处理任何转意符,并且忽略掉任何不同级别的长括号。这种方式描述的字符串可以包含任何东西,当然特定级别的反长括号除外。

另一个约定是,当正的长括号后面立即跟了一个换行符,这个换行符就不包含在这个字符串内。举个例子,假设一个系统使用 ASCII 码(这时,'a' 编码为 97 ,换行符编码为 10 ,'1' 编码为 49 ),下面五种方式描述了完全相同的字符串:

   a = 'alo\n123"'   a = "alo\n123\""   a = '\97lo\10\04923"'   a = []   a = [==[   alo   123"]==]


看不懂 ttk_02

freeway 发表于 2011-10-8 13:08:35


print('今天\n天气\n真好')
--Note (replace('今天\n天气\n真好','\n',''))
--Note (replace('今天\n天气\n真好','\\n',''))
--Note (replace('今天\n天气\n真好','\10',''))

ttk_09

[ 本帖最后由 freeway 于 2011-10-8 02:15 PM 编辑 ]

freeway 发表于 2011-10-8 13:44:37

只好用 ChatNote 了,可以输出一段带换行的文字。
replace还是要想想怎么弄。

freeway 发表于 2011-10-8 14:24:30


Note (string.gsub(wildcards ,"\n",""))
居然把string.gsub给忘了。
lttk_09
页: [1]
查看完整版本: MUSH Note replace 回车 的问题