lua 正则实现指定次数匹配
(2017-08-18 14:51:38)
最近在写lua,需要验证参数合法性,比如参数格式为多个值用逗号分割,但是值的数量不固定。发现其原生正则无法实现php正则中类似/^(\d+,){0,4}\d+$/这样的匹配验证,网上搜索也无果,所以自己用lua实现了,写的不好还请多多指教。
-- 正则匹配-可指定匹配次数(类似于php正则中的{x,y})
-- @param stirng 要匹配的字符串
-- @regex string 匹配正则
-- @return nil or string 如果匹配到则返回匹配到的字符串 否则 返回nil
-- @desc 支持不含{} 和 仅含1次{}的正则匹配
-- @desc 如果正则参数不包含{} 则按照普通正则处理
-- @desc 如果正则参数包含{} 支持格式 {n,} 匹配n次及以上 {,m} 匹配m次及以下 {n,m} 匹配n至m次 {n}
匹配n次
local function n_gmatch(str,regex)
local
rs
local
match_str_all = '' -- 累计匹配到的字符串
if type(str)
== 'string' and str ~= '' and type(regex) == 'string' and regex ~=
'' then
local _start,_end,reg_pre,min_num,comma,max_num,reg_end =
string.find(regex,
'^([^%{%}]+)%{(%d*)(,?)(%d*)%}([^%{%}]*)$')
if _start and _end then
-- 正则包含{}
if min_num == '' and max_num == '' then
-- {}内容为空
-- print('{}内容为空')
else
if comma == '' then
-- {n} 格式
max_num = min_num
end
min_num = tonumber(min_num) or 0
max_num = tonumber(max_num) or 99999999
if min_num <= max_num then
--
print('前置正则:'..reg_pre,'后置正则:'..reg_end,'最小次数:'..min_num,'最大次数:'..max_num)
local start_est,end_est = false,false --是否是从最开始或最结尾匹配