如何在VCL中拆分过长的代码行?
在VCL中拆分长代码行的方法
针对VCL中过长的字符串(比如你的正则表达式),可以利用VCL自动拼接相邻字符串字面量的特性来拆分代码行,不需要额外连接符,具体有两种实现方式:
直接拆分正则字符串
将长正则拆分为多个带引号的字符串片段,直接换行排列即可,VCL会自动将它们拼接成完整的正则:
if (req.url.path ~ "^/stuff/otherstuff/" "(?:[a-z0-9_]+)" "(?:/(?:2018|2018_2019|2019|2019_2020|2020|2020_2021|2021|2021_2022|2022|2022_2023|2023|2023_2024|2024))?" "(?:/(?:cool|story|bro)(?:/.*)?)?/?$") { # do something }
先赋值给变量再使用
如果希望代码更清晰或正则需要复用,可以先把拆分后的字符串赋值给一个临时变量,再在条件判断中引用:
set req.http.X-Temp-Regex = "^/stuff/otherstuff/" "(?:[a-z0-9_]+)" "(?:/(?:2018|2018_2019|2019|2019_2020|2020|2020_2021|2021|2021_2022|2022|2022_2023|2023|2023_2024|2024))?" "(?:/(?:cool|story|bro)(?:/.*)?)?/?$"; if (req.url.path ~ req.http.X-Temp-Regex) { # do something }
注意事项
- 每个拆分的字符串片段必须单独用引号包裹
- 片段之间不需要添加任何连接符号(比如
+),直接相邻排列(换行+缩进即可) - 这种方式仅适用于字符串字面量的拼接,不能和变量或其他表达式混合拼接
内容的提问来源于stack exchange,提问作者dfrancis
相关产品推荐
相关产品推荐

