ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 正则表达式名字

正则表达式名字

原创 Linux操作系统 作者:nginx_web 时间:2012-06-06 18:30:01 0 删除 编辑
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 正则表达式名字

 

要使用nginx提供的正则表达式名字,那么在编译安装nginx时必须首先安装Perl编程语言正则表达式(PCRE)。为了使用正则表达式,在服务器名字开始之前使用一个波浪号字符“~”:

 

server_name  ~^www\d+\.nginx\.net$;

 

否则,就会被作为准确的名字来对待,或者是如果在表达式中包含一个星号(*),那么就会被作为一个通配符名字(最有可能成为无效的名字)。不要忘记设置锚符号“^” “$”它们不需要在语法,而是在逻辑上。同样要注意的是,在域名中的点号“.”要使用反斜线进行转义。另外,一个包含有“{” “}”的正则表达式要使用引号:

 

server_name  "~^(?\w\d{1,3}+)\.nginx\.net$";

 

否则,nginx将会在启动时失败,并且会显示出以下错误信息:

 

directive "server_name" is not terminated by ";" in ...

 

被捕获的命名正则表达式(named regular expression)在以后可以作为变量:

 

server {

    server_name   ~^(www\.)?(?.+)$;

 

    location / {

        root   /sites/$domain;

    }

}

  

PCRE库支持命名捕获(named capture),遵循下列语法:

 

?<name>

兼容Perl 5.10语法,从PCRE-7.0开始支持

?'name'

兼容Perl 5.10语法,从PCRE-7.0开始支持

?P<name>

Python语法兼容,从PCRE-4.0开始支持

   

如果nginx启动失败并显示如下错误消息:

 

pcre_compile() failed: unrecognized character after (?< in ...

  

这个消息的意思是说PCRE库太旧,你应该尝试一下语法“?P<name>”

另外在使用捕获时,也可使用数字形式:

 

server {

    server_name   ~^(www\.)?(.+)$;

 

    location / {

        root   /sites/$2;

    }

}

   

然而,这种使用方法仅限于简单的情况(如上述),因为数字的引用能够很容易地被覆盖。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27043155/viewspace-732082/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: Nginx访问MongoDB
请登录后发表评论 登录
全部评论

注册时间:2012-06-06

  • 博文量
    54
  • 访问量
    410297