如何使用Lua字符串操作从URL获取文件名.
我有这个网址
https://thisisarandomsite.com/some_dir/src/blah/blah/7fd34a0945b036685bbd6cc2583a5c30.jpg
我想得到7fd34a0945b036685bbd6cc2583a5c30.jpg它,它可以是一个随机网站,所以网站名称不是静态的.
我有一个与此类似的字符串:
[13:41:25] [100:Devnull]: 01:41:20, 13:41:21> |Hunit:Player-3693-07420299:DevnullYour [Chimaera Shot] hit |Hunit:Creature-0-3693-1116-3-87318-0000881AC4:Dungeoneer's Training DummyDungeoneer's Training Dummy 33265 Nature.
Run Code Online (Sandbox Code Playgroud)
如果你想知道,它来自魔兽世界.
我想结束这样的事情:
[13:41:25] [100:Devnull]: 01:41:20, 13:41:21> Your [Chimaera Shot] hit Dungeoneer's Training Dummy 33265 Nature.
Run Code Online (Sandbox Code Playgroud)
如果你注意到,"Dungeoneer's Training Dummy"会被打印两次.我设法用这样的东西摆脱了第一个"| Hunit"部分:
str = "[13:41:25] [100:Devnull]: 01:41:20, 13:41:21> |Hunit:Player-3693-07420299:DevnullYour [Chimaera Shot] hit |Hunit:Creature-0-3693-1116-3-87318-0000881AC4:Dungeoneer's Training DummyDungeoneer's Training Dummy 33265 Nature."
str = string.gsub(str, "|Hunit:.*:.*Your", "Your")
Run Code Online (Sandbox Code Playgroud)
哪个返回:
print(str) # => [13:41:25] [100:Devnull]: 01:41:20, 13:41:21> Your [Chimaera Shot] hit |Hunit:Creature-0-3693-1116-3-87318-0000881AC4:Dungeoneer's Training DummyDungeoneer's Training Dummy 33265 Nature.
Run Code Online (Sandbox Code Playgroud)
然后我添加第二个gsub:
str = string.gsub(str, …Run Code Online (Sandbox Code Playgroud) 这里有一些讨论和实用函数,用于分割字符串,但是我需要一个特殊的单行程来完成一个非常简单的任务.
我有以下字符串:
local s = "one;two;;four"
Run Code Online (Sandbox Code Playgroud)
我想分开它";".我想最终得到{ "one", "two", "", "four" }回报.
所以我试着这样做:
local s = "one;two;;four"
local words = {}
for w in s:gmatch("([^;]*)") do table.insert(words, w) end
Run Code Online (Sandbox Code Playgroud)
但结果(words表)是{ "one", "", "two", "", "", "four", "" }.那肯定不是我想要的.
现在,正如我所说,这里有一些关于分裂字符串的讨论,但它们中有"冗长"的功能,我需要一些简洁的东西.我需要这个代码用于一个程序,在那里我展示了Lua的优点,如果我添加一个冗长的函数来做一些如此微不足道的事情,它将违背我.
str = "fa, (captured)[asd] asf, 31"
for word in str:gmatch("\(%a+\)") do
print(word)
end
Run Code Online (Sandbox Code Playgroud)
嗨!我想在括号中捕捉一个单词.
我的代码应该打印"捕获"字符串.
Run Code Online (Sandbox Code Playgroud)lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\('
我得到了这个语法错误.
当然,我可以找到括号的位置并使用string.sub函数
但我更喜欢简单的代码.
另外,括号给了我类似的错误.
有没有办法替换Lua中字符串中位置N处的字符.
这是我到目前为止所提出的:
function replace_char(pos, str, r)
return str:sub(pos, pos - 1) .. r .. str:sub(pos + 1, str:len())
end
str = replace_char(2, "aaaaaa", "X")
print(str)
Run Code Online (Sandbox Code Playgroud)
我不能使用gsub,因为它会取代每个捕获,而不仅仅是位置N的捕获.
我试图从字符串中删除'$'符号,但我猜它是一些特殊的字符?我对lua非常陌生(今天刚刚开始编写).从我的理解,这应该工作,并为其他字符做string.gsub(line,'$','').
如何在Lua中替换一个美元符号,因为它是模式匹配中的特殊字符?
我试过这个:
string.gsub("$44,000.00", "$", "")
> "$44,000.00"
Run Code Online (Sandbox Code Playgroud)
但它只是在字符串的末尾添加一个空白.例如
string.gsub("$44,000.00", "$", "what")
> "$44,000.00what"
Run Code Online (Sandbox Code Playgroud) 所以我有以下代码在空格之间拆分字符串:
text = "I am 'the text'"
for string in text:gmatch("%S+") do
print(string)
end
Run Code Online (Sandbox Code Playgroud)
结果:
I
am
'the
text'
Run Code Online (Sandbox Code Playgroud)
但我需要这样做:
I
am
the text --[[yep, without the quotes]]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
编辑:只是为了补充问题,我们的想法是将参数从程序传递到另一个程序.这是我正在工作的拉取请求,目前正在审核中:https://github.com/mpv-player/mpv/pull/1619
我有一个xml页面,我有一个监控系统扫描,这里是源数据:
`<queues>
<queue name="workQueue">
<stats size="0" consumerCount="28" enqueueCount="29320" dequeueCount="37000"/>
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的代码:
local pattern = " size=(%d+) "
local a = alarm.get("CO13974960-19518")
local vsize = string.match(a.message, pattern)
local sum = vsize
Run Code Online (Sandbox Code Playgroud)
我正在尝试从XML页面中定位这一部分数据:
stats size="0"
Run Code Online (Sandbox Code Playgroud)
值"0"是我感兴趣的数字,我正在寻找一种方法来通过脚本捕获该数字(无论它到达什么).
我想我的脚本正在寻找:
size=0 而不是 size="0"
但我不确定如何执行此操作的正确语法.