首页 > 解决方案 > 正则表达式截断 nginx 上的字符串

问题描述

我正在尝试使用 nginx 缓存功能,但是我们有使用纬度和经度的端点,因此为了提高缓存命中率,我们必须截断纬度和经度。

我创建了一个地图来忽略最后两个纬度数字。问题是地图不起作用,它总是返回原始纬度(45.45452)。

考虑 $arg_latitude 为 45.45452,预期结果为 45.45。

map $arg_latitude $rounded_latitude {
    default $arg_latitude;
    ~\d+\.\d\d $arg_latitude;
}

知道为什么不工作吗?

标签: regexnginxcaching

解决方案


您的结果map始终是 的原始值$arg_latitude,因为这是您在右侧列中插入的值。

您需要在正则表达式中添加一个捕获并将其用作新值。

例如:

map $arg_latitude $rounded_latitude {
    default                 $arg_latitude;
    ~^(?<rounded>\d+\.\d\d) $rounded;
}

建议使用命名捕获,因为数字捕获可能不在$rounded_latitude评估点的范围内。

有关更多信息,请参阅此文档


推荐阅读