加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:00:05 所属栏目:百科 来源:网络整理
导读:我是Lua正则表达式等价函数的新手,我需要编写以下正则表达式,它应该匹配带小数的数字 b[0-9]*.b[0-9]*(?!]) 基本上,它匹配十进制格式的数字(例如:1,1.1,0.1,0.11),它们不以’]’结尾,我一直试图用Lua使用string.gmatch写这样的正则表达式,但我’对Lua匹配
我是Lua正则表达式等价函数的新手,我需要编写以下正则表达式,它应该匹配带小数的数字

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

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

谢谢!

解决方法

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

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

>没有“单词边界”匹配器,
>没有替代品,
>也没有前瞻或类似.

我认为没有Lua模式可以匹配你的字符串的每一个可能的出现,而没有其他的,这意味着你必须以某种方式解决这个问题.

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

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

我用frontier pattern进行了一些实验.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读