标签: lua-patterns

将Lua string.match输出存储到数组

通常,我使用两个变量来存储类似以下内容的输出:

a = {'alarm boy car dentist','alarm car dentist elephant','alarm dentist elephant fabulous','alarm elephant fabulous goat'}
k, v = string.match(a[1], 'alarm dentist (%w+) (%w+)' )
print(k, v)
elephant fabulous
Run Code Online (Sandbox Code Playgroud)

但我不想使用两个变量,而是将其存储在数组或表中。

我的最终目标是创建一个函数,在该函数中输入数组(在此例中为“ a”)和模式(在此例中为“ alarm dentist(%w +)(%w +)(%w +)”),并返回所需的附带词(如果找到),否则为“ nil”。问题是模式查找的单词数是不确定的。在这种情况下为2,但我希望用户能够输入任何模式,即“警报牙医(%w +)(%w +)(%w +)(%w +)”或“警报牙医(%w +)”。

所以到目前为止,这是我的想法:(我正在Ubuntu 12.04LTS中使用命令行工具对其进行测试)

a = {'alarm boy car dentist','alarm car dentist elephant','alarm dentist elephant fabulous','alarm elephant fabulous goat'}
function parse_strings (array, pattern)
words = nil
for i=1, #array do
    c = string.match(array[i], pattern)
    if c ~= nil then …
Run Code Online (Sandbox Code Playgroud)

arrays string lua lua-patterns

4
推荐指数
1
解决办法
2140
查看次数

意外的lua模式匹配结果

对于以下代码:

local function getParentPath(_path)

    pattern = "(.+)([/\\][/\\])(.+)"
    i,j,k = string.match(path,pattern)
    return i,j,k

end

print(getParentPath(path))
Run Code Online (Sandbox Code Playgroud)

对于path ="C://data//file.text",我得到:

C://data // file.text
Run Code Online (Sandbox Code Playgroud)

但是对于path ="C:\ data\file.text",我得到:

nil nil nil
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种适合两者的模式.有什么建议?

lua lua-patterns

4
推荐指数
1
解决办法
158
查看次数

这个Lua模式中括号的用法是什么?

基本字符串是: IP: 192.168.0.1

将该字符串传递给string.gmatch函数(除了下面的模式)将返回以下结果:

模式:IP: (%d+.%d+.%d+.%d+) - > 192.168.0.1

模式:IP: %d+.%d+.%d+.%d+ - > IP:192.168.0.1

我的问题是Lua模式匹配引擎的这些括号的含义是什么?为什么在第一个模式中使用括号,IP:字符串被省略但在第二个模式中没有?

lua lua-patterns

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

在字符串lua模式中找到一个url

使用Lua模式匹配我希望能够解析一个字符串并找到以下URL

http://www.test.com/
www.test.com/
test.com/
test-test.test.com/
Run Code Online (Sandbox Code Playgroud)

斜杠可以是可选的,但如果包含它,它必须能够找到嵌套文件夹,例如:

test.com/test/
Run Code Online (Sandbox Code Playgroud)

这样我可以使用单个模式匹配来查找URL.问题是我使用的所有例子都不起作用或导致魔兽世界永远不会让加载屏幕出现我自己无法解决的错误.

我不再拥有我在代码中使用的模式,所以我可以使用一个可以工作的模式,而不是钩住不正确的URL.如果以后需要,我会提出一些.

url lua pattern-matching string-matching lua-patterns

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

string.match throw error:尝试索引字段'?' (字符串值)

我试图在文本文件中的一行文本上匹配三个数据并将它们存储在表元素中.每行看起来像这样:

0.277719    0.474610    This
0.474610    0.721241    is
0.721241    1.063209    test
Run Code Online (Sandbox Code Playgroud)

我有一个本地表来保存文本行,我正在尝试分配数据如下.

local data = {}
local file = io.open( "audio/audio.txt", "r" )
local i = 1
for line in file:lines() do
    data[i] = line
    data[i].start, data[i].out, data[i].name = string.match( line, '(%S+)%s*(%S+)%s*(%S+)' )
    i = i + 1
end
Run Code Online (Sandbox Code Playgroud)

data[i] = line部分工作正常.下一行没有.我得到的就是以下错误data[i].start, data[i].out, data[i].name = string.match( line, '(%S+)%s*(%S+)%s*(%S+)' ):

attempt to index field '?' (a string value)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

lua lua-patterns lua-table

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

Lua gsub 第二个实例

我正在使用

local mystring = 'Thats a really nice house.'
string.gsub(mystring,"% ", "/",1)
Run Code Online (Sandbox Code Playgroud)

用斜杠替换第一个空格字符。

但是如何只替换第二次出现的空格呢?

lua gsub lua-patterns

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

从"a","b","c","d"除去字符串中的所有字符

我有一个字符串,我想,以取代所有的字符和数字用"",除了字符a,b,c,d.

而不是像下面的例子中那样编写多行长代码,还有其他一些方法可以更有效地编写它吗?

myString:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$%,]", "") --special chars
... --same for chars
... --same for digits
Run Code Online (Sandbox Code Playgroud)

lua gsub lua-patterns

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

Lua string.find正确的格式?

我有一个非常简单的问题,但我的谷歌研究没有帮助..我对Lua很新,所以..

我将字符串"XXXX_YYYYYY_zzzzzz"存储在局部变量中,我想解析它并获得3个新的局部变量.我应该使用string.find吗?

local str_ = "XXXX_YYYYY_zzzzzz"    
local first_, second_, third_ = strind.find(str_, "^(%w+)_(%w+)_(%w+)$")
Run Code Online (Sandbox Code Playgroud)

string lua string-matching lua-patterns

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

字符串与 Lua 模式匹配 URI

如何对这些 URI 进行模式匹配?我需要字符串匹配第一个和第二个斜杠 (1) 之间的任何字符或第一个斜杠 (2) 或 (3) 之后出现的任何字符/

请注意第一个示例中的尾部斜杠。

(1) /resource/_another-resource

(2) /_resource

(3) /

我有uri_resource = uri:match('^%/(.-)%/')它处理示例 1,但如果不存在尾随斜杠,则会失败。

lua lua-patterns

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

Lua 模式匹配仅返回第一个匹配

我不知道如何让 Lua 返回特定模式匹配的所有匹配项。

我有以下正则表达式,它可以工作并且非常基本:

.*\n
Run Code Online (Sandbox Code Playgroud)

这只是每行分割一个长字符串。

Lua 中的等价物是:

.-\n
Run Code Online (Sandbox Code Playgroud)

如果您在正则表达式网站中针对以下文本运行上述内容,它将找到三个匹配项(如果使用全局标志)。

Hello
my name is
Someone
Run Code Online (Sandbox Code Playgroud)

如果不使用全局标志,它将仅返回第一个匹配项。这是LUA的行为;就好像它没有全局开关并且只会返回第一个匹配项。

我的确切代码是:

local test = {string.match(string_variable_here, ".-\n")}
Run Code Online (Sandbox Code Playgroud)

例如,如果我在上面的测试中运行它,test将是一个只有一个项目(第一行)的表。我什至尝试使用捕获组,但结果是相同的。

我找不到一种方法让它返回所有匹配项,有谁知道这在 LUA 中是否可行?

谢谢,

lua lua-patterns

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