英语不是我的母语,所以描述这个问题有点困难。
我想通过 lua string.gsub() 在 str 中获取 'd=40',但是有一些问题。
------代码如下---
本地字符串=
[==[
--a=10
- -b=20
--c=30
d=40
]==]
本地 pat1 = [=[%s[%s]]=]
本地 pat2 = [=[\n[%s]]=]
str:gsub(pat1, 函数 print("pat1>>" .. s) end) --pat1>>d=40
str:gsub(pat2, function(s) print("pat2
本地 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' ,
所以我认为它可以匹配,但它不起作用,为什么?
当你使用[[]]
字符串的表示法,这是一种特殊的字符串文字,它完全按照您提供的方式获取字符串。没有进行任何字符转义。你可以放一些=
括号中的字符,使您可以更轻松地在字符串中使用 [ 字符。
字符串文字"\n"
是一个字符,代表换行符。这是因为使用了转义字符\
。应用于“n”字符的转义字符表示“换行符”。
字符串文字[[\n]]
正如它所说:字符“\”后跟字符“n”。因为没有逃避,\n
没有受到特殊对待。这正是它看起来的样子。
因此,当你说local pat2 = [=[\n[%s]]=]
你是说“第一个字符应该是 '\' 后跟 'n' 后跟空格。这不是你想要的;你want逃避工作。所以你应该使用常规的字符串文字:local pat2 = "\n[%s]"
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)