varnish-vcl - 如何在清漆中使用正则表达式从长度未定义的字符串中提取 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
解决方案
使用捕获组:
regsub(req.http.mystring, "^(.{20}).*", "\1")
在 regex101.com 上进行测试
推荐阅读
- amazon-web-services - 使用 aws cdk 时 dynamodb 的 TableProps 是什么
- java - 使用 brew 在 Mac 上安装 Zeppelin:需要 Java 1.7
- python - Pycharm 中的相对导入
- python - 一种仅在谷歌教室 API python 上使用非存档教室的方法
- sql - 使用 CASE WHEN 表达式计算 SQL 中各列的文本值
- python - 如何在pyspark sql中仅获取月末日期?
- django - 我可以将数字海洋空间用于用户使用 django 上传的文件吗?
- python - 如何在 Kaggle 上安装最新版本的 tensorflow?
- javascript - 在Vue应用程序中从多个输入创建单个数组
- javascript - 如何在 javascript discord bot 中使用命令更改变量