通常,我使用两个变量来存储类似以下内容的输出:
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) 对于以下代码:
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)
我正在寻找一种适合两者的模式.有什么建议?
基本字符串是: 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模式匹配我希望能够解析一个字符串并找到以下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.如果以后需要,我会提出一些.
我试图在文本文件中的一行文本上匹配三个数据并将它们存储在表元素中.每行看起来像这样:
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)
我究竟做错了什么?
我正在使用
local mystring = 'Thats a really nice house.'
string.gsub(mystring,"% ", "/",1)
Run Code Online (Sandbox Code Playgroud)
用斜杠替换第一个空格字符。
但是如何只替换第二次出现的空格呢?
我有一个字符串,我想,以取代所有的字符和数字用"",除了字符a,b,c,d.
而不是像下面的例子中那样编写多行长代码,还有其他一些方法可以更有效地编写它吗?
myString:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$%,]", "") --special chars
... --same for chars
... --same for digits
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的问题,但我的谷歌研究没有帮助..我对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) 如何对这些 URI 进行模式匹配?我需要字符串匹配第一个和第二个斜杠 (1) 之间的任何字符或第一个斜杠 (2) 或 (3) 之后出现的任何字符/。
请注意第一个示例中的尾部斜杠。
(1)
/resource/_another-resource
(2)
/_resource
(3)
/
我有uri_resource = uri:match('^%/(.-)%/')它处理示例 1,但如果不存在尾随斜杠,则会失败。
我不知道如何让 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 中是否可行?
谢谢,