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"

这里的要点是 Lua 模式中不接受逻辑“或”语句。


编辑:刚刚意识到这样做是可能的:

strng.gsub("slash\\ending\\string\\", "[\\,/]$", "")

尽管模式的逻辑“或”仍然缺失。

有帮助吗?

解决方案

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

的Lua正则表达式是...异常。据我可以从文档告诉,没有支持一般的交替,也不能用于应用重复运营商群体。在你的情况,像你说的,你可以得到你想要的东西用一个字符类(我不知道什么是逗号你的性格类做,虽然)。

在这里看到: http://www.lua.org/手动/ 5.1 / manual.html#5.4.1

(在我曾经工作在一个项目上,我们写我们自己的Lua因为这个结合PCRE。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top