如何使用varnish中的regex从未定义长度的字符串中提取n个字符?

问题描述 投票:0回答:1

我正在为我的后端服务器编写一个清漆模块(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
1个回答
0
投票

使用捕获组:

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

在regex101.com上测试它

© www.soinside.com 2019 - 2024. All rights reserved.