我正在学习lua.关于lua中的模式匹配我在lua.org的lua文档中找到了以下句子:
然而,Lua中的模式匹配是一个强大的工具,包括一些难以与标准POSIX实现匹配的功能.
由于我熟悉posix正则表达式,我想知道是否有任何常见的样本,其中lua模式匹配与正则表达式相比"更好" - 或者我是否误解了句子?如果有任何常见的例子:为什么模式匹配与正则表达式中的任何一个更适合?
我该怎么办?
我懂了:
name = "^aH^ai" string.gsub(name, "^a", "")
应返回"Hi",但它将插入符号作为模式字符
这将是一个什么样的解决方案?(必须在gsub中完成)
我有一个标准的Windows文件名与路径.我需要从字符串中分割出文件名,扩展名和路径.
我目前正在简单地从最后寻找字符串.切断扩展,并获得第一个\路径.
我确信我应该能够使用Lua模式执行此操作,但是当我从字符串的右侧开始工作时,我仍然会失败.
例如.c:\ temp\test\myfile.txt应该返回
如果这是重复的话,请提前感谢道歉,但我可以找到很多其他语言的例子,但不是Lua的例子.
在Lua有可能实现吗?
local noSlashEnding = string.gsub("slash\\ending\\string\\", "\\|/$", "")
-- noSlashEnding should contain "slash\\ending\\string"
local noSlashEnding2 = string.gsub("slash/ending/string/", "\\|/$", "")
-- noSlashEnding2 should contain "slash/ending/string"
Run Code Online (Sandbox Code Playgroud)
这里的要点是不接受Lua模式中的逻辑"或"语句.
编辑:刚刚意识到这可能通过这样做:
strng.gsub("slash\\ending\\string\\", "[\\,/]$", "")
Run Code Online (Sandbox Code Playgroud)
虽然模式的逻辑"或"仍然缺失.
我正在主演这些来自luadoc的少量(略微修改过的)行,显然是用完整路径构建文件名.但我根本不知道第5行会发生什么.参数filename可能类似于"myfile.lua".
function out_file (filename)
local h = filename
h = string.gsub(h, "lua$", "tex")
h = string.gsub(h, "luadoc$", "tex")
h = options.output_dir .. string.gsub (h, "^.-([%w_]+%.tex)$", "%1")
return h
end
Run Code Online (Sandbox Code Playgroud)
第5行会发生什么?
在Lua只有string.find,但有时string.rfind需要.例如,要解析目录和文件路径,例如:
fullpath = "c:/abc/def/test.lua"
pos = string.rfind(fullpath,'/')
dir = string.sub(fullpath,pos)
Run Code Online (Sandbox Code Playgroud)
怎么写这样的string.rfind?
是否可以根据Lua中的列表替换字符,就像tr在Perl中一样?例如,我想替换A到B和B到A(如 AABBCC变BBAACC).
在Perl中,解决方案是$str ~= tr/AB/BA/.在Lua有这种本地方式吗?如果没有,我认为最好的解决方案是迭代整个字符串,因为单独的替换需要使用特殊符号来区分已经替换的字符和非字符的字符.
编辑:我的目标是计算反向互补的DNA串,描述在这里.
我可以使用以下方法将字符串的第一个字母大写:
str:gsub("^%l", string.upper)
Run Code Online (Sandbox Code Playgroud)
如何修改它以大写字符串中每个单词的第一个字母?
如何使用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) lua ×10
lua-patterns ×10
string ×4
regex ×2
coronasdk ×1
gsub ×1
luadoc ×1
replace ×1
substitution ×1