正则表达式名称

正则表达式名称

server {
    listen      80;
    server_name ~^(?<user>.+)\.example\.net$;
    ...
}

正则表达式名称说明

  • ~^(?<user>.+)\.example\.net$:使用正则表达式匹配域名

正则表达式名称原理: 正则表达式名称用于匹配复杂的域名,正则表达式可以使用捕获组,捕获组可以在配置中使用。

正则表达式规则

  • 正则表达式名称以 ~ 开头
  • 正则表达式名称区分大小写
  • 正则表达式名称可以使用命名捕获
  • 正则表达式名称可以使用 ~* 不区分大小写

正则表达式规则原理: 正则表达式名称以 ~ 开头,~ 表示区分大小写,~* 表示不区分大小写。正则表达式可以使用命名捕获,捕获组可以在配置中使用。

正则表达式匹配顺序

Nginx 按照声明顺序测试正则表达式名称。

正则表达式匹配顺序原理: Nginx 按照声明顺序测试正则表达式名称,第一个匹配的正则表达式名称会被使用。

正则表达式优先级

正则表达式名称的优先级最低。

正则表达式优先级原理: Nginx 按照精确匹配、通配符匹配(以 * 开头)、通配符匹配(以 * 结尾)、正则表达式匹配的顺序匹配服务器名称。

示例

server_name ~^(?<user>.+)\.example\.net$;
server_name ~^www\d+\.example\.net$;
server_name ~*example\.net$;

示例说明

  • ~^(?<user>.+)\.example\.net$:匹配 user.example.net,捕获用户名
  • ~^www\d+\.example\.net$:匹配 www1.example.netwww2.example.net
  • ~*example\.net$:匹配 Example.NetEXAMPLE.NET

示例原理: 正则表达式名称用于匹配复杂的域名,正则表达式可以使用捕获组,捕获组可以在配置中使用。

正则表达式捕获组

正则表达式名称可以使用命名捕获组,捕获组可以在配置中使用:

server {
    listen      80;
    server_name ~^(?<user>.+)\.example\.net$;

    location / {
        root /data/$user;
    }
}

正则表达式捕获组说明

  • (?<user>.+):正则表达式捕获组,捕获用户名
  • $user:使用捕获的用户名

正则表达式捕获组原理: 正则表达式捕获组用于提取服务器名称中的信息,可以在配置中使用。

正则表达式性能

正则表达式名称性能较低。

正则表达式性能原理: 正则表达式名称需要逐个测试,性能较低。建议优先使用精确名称和通配符名称,避免使用正则表达式名称。

注意事项

  • 正则表达式名称按声明顺序测试
  • 正则表达式名称优先级最低
  • 正则表达式名称性能较低
  • 正则表达式名称可以使用命名捕获
  • 正则表达式名称可以使用 ~* 不区分大小写