如何使用nginx获取字符串的子字符串

Duo*_*yen 2 nginx

假设我有一个从 cookie 中获取的值

$cookie_MY_COOKIE

其中包含 64 个字符。

如何删除 nginx 配置中的前 60 个字符?

Ric*_*ith 5

map指令允许您根据另一个变量的值定义一个新变量。您可以使用正则表达式来捕获最后四个字符。

map块需要在中定义http块(外部server块),从而为新的变量名称必须是全局唯一的。

有关详细信息,请参阅此文档

例如:

map $cookie_MY_COOKIE $my_value {
    default                    "";
    "~^.{60}(?<suffix>.{4})$"  $suffix;
}

server {
    ...
}
Run Code Online (Sandbox Code Playgroud)

正则表达式只会匹配恰好 64 个字符长的值,否则返回一个空字符串。

我们使用命名捕获,因为每次 Nginx 在您的配置中的其他地方评估正则表达式时,数字捕获都会被覆盖。

使用变量$my_value从 中获取最后四个字符$cookie_MY_COOKIE