如何在Lua中编写这个正则表达式?

我对 Lua 正则表达式等价特性不太熟悉,我需要编写下面的正则表达式,应该匹配带小数的数字

\b[0-9]*.\b[0-9]*(?!])

基本上,它匹配以十进制格式表示的数字(例如:1、1.1、0.1、0.11),它们不以 ']' 结尾。我一直在尝试使用 string.gmatch 在 Lua 中编写类似这样的正则表达式,但是我对 Lua 匹配表达式还不熟悉...

谢谢!

原文链接 https://stackoverflow.com/questions/6192137

点赞
stackoverflow用户34799
stackoverflow用户34799

"%d*%.?%d+" 将匹配所有十进制格式的数字(请注意,这将错过任何带符号的数字,如 -1.1+3.14)。您需要想出另一种解决方案来避免以 ] 结尾的情况,例如在查找数字之前从字符串中删除它们:

local pattern = "%d*%.?%d+"
local clean = string.gsub(orig ,pattern .. "%]", "")
return string.gmatch(clean, pattern)
2011-05-31 19:06:31
stackoverflow用户600500
stackoverflow用户600500

Lua 没有正则表达式,主要是因为一个完整的正则表达式库比 Lua 本身还要大。

Lua 实现的是匹配模式,它们的能力较弱(但对于许多使用情况仍足够):

  • 没有“单词边界”匹配器,
  • 没有替代项,
  • 也没有前瞻或类似功能。

我认为没有 Lua 模式能够匹配您的字符串的每个可能出现,也没有其他模式,这意味着您必须想办法绕过这个问题。

Stuart 提出的模式 %d*%.?%d* 可匹配所有十进制数(带有或不带有小数点),但它也匹配空字符串,这不太有用。%d+%.?%d* 匹配带有小数点之前至少一个数字的所有十进制数(或没有小数点)。%d*%d.?%d+ 匹配带有小数点之后至少一个数字的所有十进制数(或没有小数点)。%.%d+ 匹配小数点之前没有数字的十进制数。

一个简单的解决方案是搜索多个这些模式(例如,%d+%.?%d*%.%d+),并将结果组合在一起。然后查看找到它们的位置,并查看后面是否有“]”。


我对 frontier 模式 进行了一些实验。

模式 %f[%.%d]%d*%.?%d*%f[^%.%d%]] 匹配所有之前既不是数字又不是小数点(或之前没有),之后既不是“]”又不是数字或小数点(或之后没有)的十进制数。它也匹配单个小数点。

2011-05-31 19:11:48