标签: lua-patterns

Lua'plain'tring.gsub

我用字符串解析打了一个小块.我有一个字符串:

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将是非常感谢.

string lua parsing gsub lua-patterns

3
推荐指数
1
解决办法
3441
查看次数

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

英语不是我的母语,所以描述这个问题有点困难。
我想通过 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' ,
所以我认为它可以匹配,但它不能工作,为什么?

lua pattern-matching lua-patterns

3
推荐指数
1
解决办法
9466
查看次数

将'%'放在Lua中的string.gsub()中

我有这个代码

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)?

lua gsub lua-patterns

3
推荐指数
1
解决办法
3011
查看次数

任何Lua模式替代正则表达式(\\.|.)?

有一个常见的习惯用于遍历字符串,其字符可以使用正则表达式使用反斜杠进行转义(\\.|.),如下所示:

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 lua-patterns

3
推荐指数
1
解决办法
511
查看次数

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 lua lua-patterns

3
推荐指数
1
解决办法
2157
查看次数

删除字符串中的空格但不删除lua中的新行

我曾经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)

我应该使用什么模式来获得该结果。

string lua lua-patterns

3
推荐指数
1
解决办法
1165
查看次数

使用 LPeg 使 Lua 模式不区分大小写

我有一个应用程序(除其他外)支持纯文本搜索和使用 Lua 模式的搜索。为了方便起见,该应用程序支持不区分大小写的搜索。这是一个图像片段:

(

将给定 Lua 模式转换为不区分大小写的 Lua 模式的代码不太漂亮。它主要关心字符前面是否有奇数或偶数转义符 (%) 以及它是否位于方括号内。图像中显示的图案变为%a[bB][bB]%%[cC][%abB%%cC]

我还没有机会学习 LPeg,我想这可能是我的动力。

我的问题是,这是否是 LPeg 可以轻松处理的事情?

lua case-insensitive pattern-matching lua-patterns lpeg

2
推荐指数
1
解决办法
505
查看次数

仅使用模式匹配提取文件名

是否可以使用string.match并返回捕获,直到最后一个.字符停止在扩展部分?

string lua pattern-matching lua-patterns

2
推荐指数
1
解决办法
3333
查看次数

Lua中如何从字符串中取出1个单词

我知道如何拆分整个字符串并将其放入表中,但我只需要取出第一个单词,然后字符串的其余部分需要保持不变。

我尝试对此做一些事情,但我不知道:

words = {}
for word in s:gmatch("%w+") do table.insert(words,word) end
Run Code Online (Sandbox Code Playgroud)

string lua split lua-patterns

2
推荐指数
1
解决办法
5161
查看次数

Lua 中的“非开头”模式

是否有匹配不以 a 开头的字符串的模式!,我在 Google 和 SO 中搜索,似乎 Lua 没有“非模式”。

!xxxx yyyy--match
!?????? --match
?? --not match
test string --not match
Run Code Online (Sandbox Code Playgroud)

lua lua-patterns

2
推荐指数
2
解决办法
1940
查看次数