繁体   English   中英

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

[英]How to write this regular expression in Lua?

我是 Lua 正则表达式等效功能的新手,我需要编写以下正则表达式,它应该匹配带小数的数字

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

基本上,它匹配十进制格式的数字(例如:1、1.1、0.1、0.11),它们不以']'结尾,我一直在尝试使用 Lua 使用string.gmatch编写这样的正则表达式,但我'我对 Lua 匹配表达式非常缺乏经验......

谢谢!

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

Lua 所拥有的是匹配模式,它们的功能不那么强大(但对于许多用例来说仍然足够):

  • 没有“单词边界”匹配器,
  • 没有其他选择,
  • 也没有前瞻或类似的。

我认为没有 Lua 模式可以匹配您的字符串的所有可能出现,并且没有其他模式,这意味着您必须以某种方式解决这个问题。

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

一个简单的解决方案是搜索多个这些模式(例如, %d+%.?%d*%.%d+ ),然后组合结果。 然后看看你找到它们的地方,看看它们后面是否有']'。


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

模式%f[%.%d]%d*%.?%d*%f[^%.%d%]]匹配所有前面不是数字也不是点(或什么都没有)的十进制数字, 后跟一个既不是]也不是数字也不是点的东西(或者什么都不是)。 不过,它也匹配单个点。

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

local pattern = "%d*%.?%d+"
local clean = string.gsub(orig ,pattern .. "%]", "")
return string.gmatch(clean, pattern)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM