[lua]lua中匹配字符串⼩数
如何从字符串中正确匹配出⼩数(带符号)字符串?
使⽤ atch
说明见官⽅⽂档,摘录如下:
Returns an iterator function that, each time it is called, returns the next captures from pattern over string s.
If pattern specifies no captures, then the whole match is produced in each call.
As an example, the following loop
s = "hello world from Lua"
for w atch(s, "%a+") do
print(w)
end
will iterate over all the words from string s, printing one per line. The next example collects all pairs key=value from the given string into a table:
t = {}
s = "from=world, to=Lua"
for k, v atch(s, "(%w+)=(%w+)") do
t[k] = v
end
例⼦:
local numberT = {}
local paramStr = '[2.04523,-3.4901,12030.39458,20]'
for k atch(paramStr, '(%-?%d+%.*%d*)') do
table.insert(numberT, tonumber(k))
end
for _, v in ipairs(numberT) do
print('type(v)='..type(v), 'v='..v)
end
正则匹配小数点--运⾏结果为:
type(v)=number v=2.04523
type(v)=number v=-3.4901
type(v)=number v=12030.39458
type(v)=number v=20
--上述中的模式串带⼩括号(),表⽰⼀个匹配结果中需要符合我们所定义的匹配⽅式(%-?%d+%.*%d*)
-
-总结:碰到lua中的特殊字符(⽐如 . / % - + ? 等等)需要先⽤%作为转义字符,
--⽐如上⾯的模式串 (%-?%d+%.*%d*) 分为 %-? %d+ %.* %d*
-- %-? %是转义了后⾯跟着的- ⽽?表⽰匹配0或1个,亦即匹配0或1个-
-- %d+ %d表⽰匹配数字跟着+号表⽰匹配1或者多个数字
-- %.* %是转义了后⾯跟着的. 跟着的*号表⽰匹配0到多个.
-- %d* 表⽰匹配0或者多个数字
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论