2013-10-23 30 views
8

什么是定义匹配类似
为Nginx的位置最有效的正则表达式

location = /[0-9a-zA-Z_-]{1,6} { content_by_lua_file ....} 

换句话说位置指令的最有效的方式URI从1到6个字符与“字符串匹配 - “,”_“,数字和字母。

或者是更快的使用位置指令来检查字符串的长度我LUA代码中,这将产生输出像

location/{content_by_lua_file...} 

回答

1

我认为,在Lua,你必须检查,不仅长度,也是字符串的内容。
Nginx使用C库PCRE作为正则表达式。
还有PCRE-JIT,JIT编译正则表达式,如果正则表达式比你的问题中的正则表达式更复杂,那么它特别有用。 我觉得在Nginx中速度更快。

9

正则表达式对于他们的工作非常有效。

当任务不重要时(例如检查特定字符串的存在情况),字符串函数可能比正则表达式更快 - 具体取决于平台。在这里,您正在检查字符范围和长度。 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}$ 

参考

+0

这就是我写的+1的答案 – bukart