ngx.re.match()
是 OpenResty 中用于进行正则表达式匹配的一个函数。它使用了基于 PCRE(Perl Compatible Regular Expressions)的正则表达式引擎,因此它支持大多数 PCRE 的正则表达式语法和功能。以下是 ngx.re.match()
支持的一些常用正则表达式规则和功能:
1. 基本字符匹配
.
: 匹配除换行符以外的任何单个字符。\d
: 匹配一个数字,等价于[0-9]
。\D
: 匹配一个非数字字符,等价于[^0-9]
。\w
: 匹配一个字母、数字或下划线,等价于[a-zA-Z0-9_]
。\W
: 匹配一个非字母、非数字和非下划线字符,等价于[^a-zA-Z0-9_]
。\s
: 匹配任何空白字符,包括空格、制表符、换页符等。\S
: 匹配任何非空白字符。
2. 边界匹配
^
: 匹配字符串的开始。$
: 匹配字符串的结束。\b
: 匹配一个单词边界。\B
: 匹配非单词边界。
3. 字符类
[abc]
: 匹配a
、b
或c
中的任意一个字符。[^abc]
: 匹配除a
、b
或c
以外的任何字符。[a-z]
: 匹配从a
到z
之间的任意字符。[0-9]
: 匹配从0
到9
之间的任意数字。
4. 重复匹配
*
: 匹配前面的字符零次或多次。+
: 匹配前面的字符一次或多次。?
: 匹配前面的字符零次或一次。{n}
: 精确匹配前面的字符n
次。{n,}
: 匹配前面的字符至少n
次。{n,m}
: 匹配前面的字符至少n
次,至多m
次。
5. 分组和替代
(...)
: 捕获组,匹配并捕获括号中的内容。(?:...)
: 非捕获组,匹配但不捕获括号中的内容。|
: 替代,匹配|
两边的任意一个表达式。
6. 贪婪与懒惰匹配
*?
: 匹配前面的字符零次或多次(非贪婪)。+?
: 匹配前面的字符一次或多次(非贪婪)。??
: 匹配前面的字符零次或一次(非贪婪)。
7. 反向引用
\n
: 匹配第n
个捕获组的内容。
8. 前瞻和后顾断言
(?=...)
: 正向前瞻断言,确保接下来的字符与表达式...
匹配,但不消耗字符。(?!...)
: 负向前瞻断言,确保接下来的字符不与表达式...
匹配。(?<=...)
: 正向后顾断言,确保前面的字符与表达式...
匹配,但不消耗字符。(?<!...)
: 负向后顾断言,确保前面的字符不与表达式...
匹配。
9. 常用选项
i
: 大小写不敏感匹配。m
: 多行模式,^
和$
匹配每一行的开始和结束。s
: 使.
匹配所有字符,包括换行符。
示例
local m, err = ngx.re.match("hello, 1234", [[\d+]])
if m then
ngx.say("Matched: ", m[0]) -- 输出: Matched: 1234
else
ngx.say("No match: ", err)
end
通过 ngx.re.match()
可以执行强大的字符串匹配和操作,充分利用 PCRE 提供的正则表达式功能。