什么是定义匹配类似
为Nginx的位置最有效的正则表达式
location = /[0-9a-zA-Z_-]{1,6} { content_by_lua_file ....}
换句话说位置指令的最有效的方式URI从1到6个字符与“字符串匹配 - “,”_“,数字和字母。
或者是更快的使用位置指令来检查字符串的长度我LUA代码中,这将产生输出像
location/{content_by_lua_file...}
什么是定义匹配类似
为Nginx的位置最有效的正则表达式
location = /[0-9a-zA-Z_-]{1,6} { content_by_lua_file ....}
换句话说位置指令的最有效的方式URI从1到6个字符与“字符串匹配 - “,”_“,数字和字母。
或者是更快的使用位置指令来检查字符串的长度我LUA代码中,这将产生输出像
location/{content_by_lua_file...}
我认为,在Lua,你必须检查,不仅长度,也是字符串的内容。
Nginx使用C库PCRE作为正则表达式。
还有PCRE-JIT,JIT编译正则表达式,如果正则表达式比你的问题中的正则表达式更复杂,那么它特别有用。 我觉得在Nginx中速度更快。
正则表达式对于他们的工作非常有效。
当任务不重要时(例如检查特定字符串的存在情况),字符串函数可能比正则表达式更快 - 具体取决于平台。在这里,您正在检查字符范围和长度。 Lua代码(运行时编译)不可能比预编译的nginx使用的PCRE regex库的C代码更快。
一般来说,a string from 1 to 6 characters with "-", "_", digits and letters
正则表达式可以写成
^[-\w]{1,6}$
这是因为
^
锚断言,我们是在字符串\w
单词的开头字符匹配字母,数字和下划线字符$
锚断言,我们是在字符串的结束然而,在nginx的,在~
(请求开头)运算符可以让我们放下锚开始^
。你会写是这样的:对信息
location ~ [-\w]{1,6}$ {
# some rewrite code, for example
# rewrite ^([^/]+)/?$ /oldsite/$1 break;
}
一个更一口好奇:在Lua本身,上述正则表达式可以变成一个Lua模式,其中%
在地方使用的\
形成特殊字符:
^[-%w]{1,6}$
参考
这就是我写的+1的答案 – bukart