gpt4 book ai didi

Lua string.gsub() 由 '%s' 或 '\n' 模式

转载 作者:行者123 更新时间:2023-12-04 05:50:12 36 4
gpt4 key购买 nike

英语不是我的母语,所以描述这个问题有点困难。
我想通过 lua string.gsub() 在 str 中获取 'd=40',但是有一些问题。

------code below---
local str = [==[
-- a=10
- -b=20
--c=30
d=40
]==]

local pat1 = [=[%s[%s]]=]
local pat2 = [=[\n[%s]]=]
str:gsub(pat1, function(s) print("pat1>>" .. s) end) --pat1>>d=40
str:gsub(pat2, function(s) print("pat2<<" .. s) end) --not match

local re1,_ = str:gsub("\n","$")
local re2,_ = str:gsub("%s","$")
print(re1) --a=10$- -b=20$ --c=30$d=40$
print(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',然后是一个空格。这不是你想要的;你想要转义工作。所以你应该使用常规字符串文字:local pat2 = "\n[%s]" .

关于Lua string.gsub() 由 '%s' 或 '\n' 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10156207/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com