我用字符串解析打了一个小块.我有一个字符串:
footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr
Run Code Online (Sandbox Code Playgroud)
我使用gsub删除字符串的一部分有困难.通常我会这样做
lineA = footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr
lineB = footage/down/temp/cars_[100]_upper/
newline = lineA:gsub(lineB, "")
Run Code Online (Sandbox Code Playgroud)
这通常会给我'cars_ [100] _upper.exr'
问题是gsub不喜欢字符串中的[]或其他特殊字符,不像string.find gsub没有使用'plain'标志来取消模式搜索的选项.
我无法手动编辑行以包含特殊字符的转义字符,因为我正在执行文件比较脚本.
任何帮助从新线lineA使用lineB将是非常感谢.
英语不是我的母语,所以描述这个问题有点困难。
我想通过 lua string.gsub() 在 str 中获取 'd=40',但是有一些问题。
------代码如下---
local str = [==[
-- 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, 函数 print("pat2<<" .. s) end) --不匹配本地 re1,_ = str:gsub("\n","$")
本地 re2,_ = str:gsub("%s","$")
print(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' ,
所以我认为它可以匹配,但它不能工作,为什么?
我有这个代码
local strs = "my dog"
print (string.gsub( strs , " ","%20"))
Run Code Online (Sandbox Code Playgroud)
我只是想输出将是这样my%20dog但我得到了这个错误
Runtime error
... invalid capture index
stack traceback:
[C]: ?
[C]: in function 'gsub'
Run Code Online (Sandbox Code Playgroud)
我读过%Lua的逃脱.
我的问题是,我如何申请%我替换的新字符串(strs)?
有一个常见的习惯用于遍历字符串,其字符可以使用正则表达式使用反斜杠进行转义(\\.|.),如下所示:
alert( "some\\astring".replace(/(\\.|.)/g, "[$1]") )
Run Code Online (Sandbox Code Playgroud)
这是在JavaScript中.此代码将字符串更改some\astring为[s][o][m][e][\a][s][t][r][i][n][g].
我知道Lua模式不支持OR运算符,因此我们无法将此正则表达式直接转换为Lua模式.
然而,我想知道:是否有另一种方法可以使用Lua模式在Lua中执行此操作(遍历可能转义的字符)?
我需要获得关于 Lua 中的一种模式的帮助,该模式在换行后停止读取。我的代码:
function getusers(file)
local list, close = {}
local user, value = string.match(file,"(UserName=)(.*)")
print(value)
f:close()
end
f = assert(io.open('file2.ini', "r"))
local t = f:read("*all")
getusers(t)
--file2.ini--
user=a
UserName=Tom
Password=xyz
UserName=Jane
Run Code Online (Sandbox Code Playgroud)
使用 file2.ini 的脚本输出:
汤姆
密码=xyz
用户名=Jane
如何让模式在到达行尾后停止?
我曾经string.gsub(str, "%s+")从字符串中删除空格但不删除新行,例如:
str = "string with\nnew line"
string.gsub(str, "%s+")
print(str)
Run Code Online (Sandbox Code Playgroud)
我期望输出如下:
stringwith
newline
Run Code Online (Sandbox Code Playgroud)
我应该使用什么模式来获得该结果。
我有一个应用程序(除其他外)支持纯文本搜索和使用 Lua 模式的搜索。为了方便起见,该应用程序支持不区分大小写的搜索。这是一个图像片段:

将给定 Lua 模式转换为不区分大小写的 Lua 模式的代码不太漂亮。它主要关心字符前面是否有奇数或偶数转义符 (%) 以及它是否位于方括号内。图像中显示的图案变为%a[bB][bB]%%[cC][%abB%%cC]
我还没有机会学习 LPeg,我想这可能是我的动力。
我的问题是,这是否是 LPeg 可以轻松处理的事情?
是否可以使用string.match并返回捕获,直到最后一个.字符停止在扩展部分?
我知道如何拆分整个字符串并将其放入表中,但我只需要取出第一个单词,然后字符串的其余部分需要保持不变。
我尝试对此做一些事情,但我不知道:
words = {}
for word in s:gmatch("%w+") do table.insert(words,word) end
Run Code Online (Sandbox Code Playgroud) 是否有匹配不以 a 开头的字符串的模式!,我在 Google 和 SO 中搜索,似乎 Lua 没有“非模式”。
!xxxx yyyy--match
!?????? --match
?? --not match
test string --not match
Run Code Online (Sandbox Code Playgroud)