什么是最有效的方式来定义一个匹配类似的位置指令
location = /[0-9a-zA-Z_-]{1,6} { content_by_lua_file ....}
换句话说,一个URI匹配1到6个字符的string,用“ – ”,“_”,数字和字母。
或者在我的LUA代码中检查string长度会更快,这将通过使用位置指令来生成输出
location / {content_by_lua_file...}
正则表达式对于他们的工作非常有效。
当任务是微不足道的(例如检查是否存在一个特定的字符串),字符串函数可以比正则表达式快 – 取决于平台。 在这里,你正在检查一个字符的范围和长度。 Lua代码(运行时编译)不太可能比Nginx使用的PCRE regex库的预编译C代码更快。
一般来说, a string from 1 to 6 characters with "-", "_", digits and letters
的正则表达式可以写成
^[-\w]{1,6}$
那是因为
^
锚主张我们在字符串的开头 \w
单词字符匹配字母,数字和下划线字符 $
anchor声明我们在字符串的末尾 但是,在nginx中, ~
(请求开始)运算符允许我们删除起始锚点^
。 你会写这样的东西:
location ~ [-\w]{1,6}$ { # some rewrite code, for example # rewrite ^([^/]+)/?$ /oldsite/$1 break; }
还有一些有趣的信息:在Lua本身,上面的正则表达式可以变成一个Lua模式,其中%
被用来代替\
形成元字符:
^[-%w]{1,6}$
参考
我认为在Lua中你不但要检查长度,还要检查字符串的内容。
Nginx使用C库PCRE作为正则表达式。
也有JRE编译正则表达式的PCRE-JIT,如果正则表达式比你的问题中的正则表达式更复杂的话,那么这个特别有用。 我认为在Nginx中速度更快。