Lua模式中的逻辑'或'?

Yur*_*sev 11 lua lua-patterns

在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模式匹配与正则表达式


gwe*_*ell 5

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)