在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)
虽然模式的逻辑"或"仍然缺失.
Mic*_*man 10
Lua不使用标准正则表达式进行模式匹配." Lua编程 "一书的引用解释了原因:
与其他几种脚本语言不同,Lua不使用POSIX正则表达式(regexp)进行模式匹配.主要原因是尺寸:POSIX regexp的典型实现需要超过4,000行代码.这比所有Lua标准库一样大.相比之下,Lua中模式匹配的实现少于500行.当然,Lua中的模式匹配不能完全完成POSIX实现.然而,Lua中的模式匹配是一个强大的工具,包括一些难以与标准POSIX实现匹配的功能.
但是,有许多绑定到现有的正则表达式库以及高级LPeg库.有关带链接的列表,请参阅http://lua-users.org/wiki/LibrariesAndBindings章节Text processing.
另外,请看这个问题:Lua模式匹配与正则表达式
Lua 模式匹配与正则表达式不同,并且没有交替概念.
例如,如果要删除"abc"或"efg"从字符串的末尾(类似于"(abc|efg)$"正则表达式),以下代码可以正常工作:
local inputstring="123efgabc"
local s,n = inputstring:gsub("abc$", "")
if n == 0 then
s,n = inputstring:gsub("efg$", "")
end
print(s) --> 123efg
Run Code Online (Sandbox Code Playgroud)