ctyun.re.match
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | captures_table, err = ctyun.re.match(subject, regex, options?) |
作用 | 正则匹配,返回匹配内容。 |
入参 | subject:待匹配字符串。 regex:正则表达式。 options:控制如何执行匹配操作,支持以下选项: a anchored mode (only match from the beginning) d enable the DFA mode (or the longest token match semantics). this requires PCRE 6.0+ or else a Lua exception will be thrown. first introduced in ngx_lua v0.3.1rc30. D enable duplicate named pattern support. This allows named subpattern names to be repeated, returning the captures in an array-like Lua table. for example, local m = ngx.re.match("hello, world", "(?\w+), (?\w+)", "D") -- m["named"] == {"hello", "world"} this option was first introduced in the v0.7.14 release. this option requires at least PCRE 8.12. i case insensitive mode (similar to Perl's /i modifier) j enable PCRE JIT compilation, this requires PCRE 8.21+ which must be built with the --enable-jit option. for optimum performance, this option should always be used together with the 'o' option. first introduced in ngx_lua v0.3.1rc30. J enable the PCRE Javascript compatible mode. this option was first introduced in the v0.7.14 release. this option requires at least PCRE 8.12. m multi-line mode (similar to Perl's /m modifier) o compile-once mode (similar to Perl's /o modifier), to enable the worker-process-level compiled-regex cache s single-line mode (similar to Perl's /s modifier) u UTF-8 mode. this requires PCRE to be built with the --enable-utf8 option or else a Lua exception will be thrown. U similar to "u" but disables PCRE's UTF-8 validity check on the subject string. first introduced in ngx_lua v0.8.1. x extended mode (similar to Perl's /x modifier) |
返回值 | captures_table:找到匹配项时,返回一个lua table,其中captures_table[0]保存整个匹配的子字符串,captures_table[1]保存第一个带括号的子模式的捕获,captures_table[2]为第二个,以此类推。未找到匹配项时此项为nil。 err:描述错误信息的字符串。 |
示例:
local m, err = ctyun.re.match("hello, 1234", "([0-9])[0-9]+", 'jo')
-- m[0] == "1234"
-- m[1] == "1"
-- 命名捕获
local m, err = ctyun.re.match("hello, 1234", "([0-9])(?<remaining>[0-9]+)")
-- m[0] == "1234"
-- m[1] == "1"
-- m[2] == "234"
-- m["remaining"] == "234"
ctyun.re.find
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | from, to, err = ctyun.re.find(subject, regex, options?) |
作用 | 正则匹配,返回匹配子字符串的开始索引 ( from) 和结束索引 ( to)。 |
入参 | subject:待匹配字符串。 regex:正则表达式。 options:控制如何执行匹配操作。 |
返回值 | from:匹配子字符串的开始索引,未找到匹配项时值为nil。 to:匹配子字符串的结束索引。 err:描述错误信息的字符串。 |
示例:
local s = "hello, 1234"
local from, to, err = ctyun.re.find(s, "([0-9]+)", "jo")
if from then
-- from == 8
-- to == 11
local matched = string.sub(s, from, to)
-- matched == "1234"
else
if err then
return
end
end
ctyun.re.gmatch
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | iterator, err = ctyun.re.gmatch(subject, regex, options?) |
作用 | 类似于ctyun.re.match,但返回一个 Lua 迭代器。 |
入参 | subject:待匹配字符串。 regex:正则表达式。 options:控制如何执行匹配操作。 |
返回值 | iterator: Lua 迭代器,可遍历获取所有匹配项。 err:描述错误信息的字符串。 |
示例:
local iterator, err = ctyun.re.gmatch("hello, world!", "([a-z]+)", "i")
if not iterator then
return
end
local m
m, err = iterator() -- m[0] == m[1] == "hello"
if err then
return
end
m, err = iterator() -- m[0] == m[1] == "world"
if err then
return
end
m, err = iterator() -- m == nil
if err then
return
end
ctyun.re.sub
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | new, n, err = ctyun.re.sub(subject, regex, replace, options?) |
作用 | 该方法主要实现匹配字符串的替换,会用replace替换匹配的字串,replace可以是纯字符串,也可以是使用$0, $1等子模式串的形式,ctyun.re.sub返回进行替换后的完整的字符串,同时返回替换的总个数。 |
入参 | subject:待匹配字符串。 regex:正则表达式。 replace:替换匹配的字符串,可以是纯字符串,也可以使用$0$1捕获匹配,也可两者结合来使用。 options:控制如何执行匹配操作。 |
返回值 | new:替换生成的新字符串。 n:成功替换的次数。 err:描述错误信息的字符串。 |
示例:
local newstr, n, err = ctyun.re.sub("hello, 1234", "[0-9]", "${0}00")
-- newstr == "hello, 100234"
-- n == 1
ctyun.re.gsub
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | new, n, err = ctyun.re.gsub(subject, regex, replace, options?) |
作用 | 类似ctyun.re.gsub,但是会进行全局替换。 |
入参 | subject:待匹配字符串。 regex:正则表达式。 replace:替换匹配的字符串,可以是纯字符串,也可以使用$0$1捕获匹配,也可两者结合来使用。 options:控制如何执行匹配操作。 |
返回值 | new:替换生成的新字符串。 n:成功替换的次数。 err:描述错误信息的字符串。 |
示例:
local newstr, n, err = ctyun.re.gsub("hello, world", "([a-z])[a-z]+", "[$0,$1]", "i")
if not newstr then
return
end
-- newstr == "[hello,h], [world,w]"
-- n == 2