LUA string.gsub()由 '%s' 或 '\\ N' 图

2019-09-16 13:14发布

英语不是我的母语,所以这是一个有点一言难尽的问题。
我想通过LUA string.gsub()STR得到“D = 40”,但是有一些问题。

------代码如下---
本地STR = [== [
- A = 10
- -b = 20
--c = 30
d = 40
] ==]

本地PAT1 = [= [%S [%S]] =]
本地PAT2 = [= [\ N [%S]] =]
STR:GSUB(PAT1,(多个)功能的打印( “PAT1 >>” ..多个)端)--pat1 >> d = 40
STR:GSUB(PAT2,(多个)功能的打印( “PAT2 <<” ..多个)端)--not匹配

当地RE1,_ = STR:GSUB( “\ n”, “$”)
当地RE2,_ = STR:GSUB( “%S”, “$”)
打印(RE1)--a = 10 $ - -b = 20 $ --c = 30 $ d = 40 $
打印(RE2) - $ A = 10 $$ - B = 20 $$ --c = 30 $ d = 40 $

由于Lua中5.1参考手册说
%S:代表所有空格字符。
我认为这等于“\ n”,“‘和’\ t”。

问:为什么PAT2无法比拟的?
但我认为,PAT2是正确的,有一个“\ n'befor'd = 40”,
所以我觉得它可以匹配,但它不能正常工作,为什么?

Answer 1:

当您使用[[]]符号的字符串,这是一个特殊的字符串字面量是需要严格按照你提供给它的字符串。 没有字符转义完成。 你可以把一些数=字符在括号内,使之更容易一点,让你使用[字符的字符串中。

字符串常量"\n"是一个字符,表示换行符。 这是因为使用转义字符的\ 。 施加到“n”字符转义字符表示“换行符”。

字符串字面[[\n]]正是这样说的:字符“\”后面跟着一个字符“N”。 由于没有逃脱完成后, \n没有经过特殊处理。 这到底是什么样子。

因此,当你说local pat2 = [=[\n[%s]]=]你说:“第一个字符应该是‘\’后面加一个空格‘N’这不是你想要的。你逃逸的工作所以,你应该用一个规则字符串: local pat2 = "\n[%s]"



文章来源: Lua string.gsub() by '%s' or '\\n' pattern