首页 > 解决方案 > 如何在清漆中使用正则表达式从长度未定义的字符串中提取 n 个字符?

问题描述

我正在为我的后端服务器编写一个清漆模块(VCL)。它需要从未定义长度的字符串中提取 n 个字符的逻辑。

我用正则表达式尝试了 vcl 的 regsub() 函数来用空格替换部分字符串。

我需要提取字符串的前 20 个字符。当字符串长度为 36 时,我使用正则表达式将最后 16 个字符替换为空白空间。但是当字符串的长度未定义时说 40。我得到 24 个字符而不是 20 个字符。我如何实现这一点?

set req.http.mysubstr = regsub(req.http.mystring, ".{16}$", "");

set req.http.mysubstr = regsub(req.http.mystring, ".{($variable)}$", ""); # $variable should be the length of the string - first 20 characters

标签: varnish-vcl

解决方案


使用捕获组:

regsub(req.http.mystring, "^(.{20}).*", "\1")

在 regex101.com 上进行测试


推荐阅读