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

问题描述

| 我是Lua regex等价功能的新手,我需要编写以下正则表达式,该表达式应将数字与小数匹配
\\b[0-9]*.\\b[0-9]*(?!])
基本上,它匹配十进制格式的数字(例如:1、1.1、0.1、0.11),但不以\'] \'结尾,我一直在尝试使用Lu1ѭ用Lua编写这样的正则表达式,但是\对Lua匹配表达式缺乏经验... 谢谢!     

解决方法

        Lua没有正则表达式,主要是因为完整的正则表达式库会比Lua本身更大。 相反,Lua拥有的是匹配模式,它们的功能不那么强大(但对于许多用例仍然足够): 没有\“单词边界\”匹配器, 没有其他选择, 并且也没有前瞻或类似内容。 我认为没有Lua模式可以匹配字符串的所有可能出现,也没有其他模式可以匹配,这意味着您必须以某种方式解决此问题。 Stuart提出的模式
%d*%.?%d*
匹配所有十进制数字(带或不带点),但也匹配空字符串,这不是很有用。
%d+%.?%d*
匹配所有小数点后至少有一位数字(或没有点),,4ѭ匹配所有小数点后至少有一位数字(或没有点)。
%.%d+
匹配小数点,点前无数字。 一种简单的解决方案是搜索这些模式中的多个(例如,
%d+%.?%d*
%.%d+
),然后组合结果。然后查看找到它们的位置,并查看它们后面是否有\'] \'。 我对边界模式做了一些实验。 模式
%f[%.%d]%d*%.?%d*%f[^%.%d%]]
匹配所有十进制数字,其后跟既不是数字也不是点的东西(或没有任何东西),然后是既不是
]
也不是数字也不是点(或没有任何东西)的东西。但是,它也与单个点匹配。     ,        
\"%d*%.?%d+\"
将以十进制格式匹配所有此类数字(请注意,它将丢失任何带符号的数字,例如
-1.1
+3.14
)。您需要想出另一种解决方案来避免以ѭ9结尾的实例,例如在查找数字之前将它们从字符串中删除:
local pattern = \"%d*%.?%d+\"
local clean = string.gsub(orig,pattern .. \"%]\",\"\")
return string.gmatch(clean,pattern)