You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带负向预查的Unix路径验证正则表达式转换为Google RE2语法以适配Kubernetes CRD校验

如何将带负向预查的Unix路径验证正则表达式转换为Google RE2语法以适配Kubernetes CRD校验

我明白你的问题了——Kubernetes CRD使用的Google RE2正则引擎不支持Perl风格的否定前瞻(也就是你原来用的(?!...)语法),所以得换一种不依赖前瞻的思路来实现同样的Unix路径校验逻辑。

先回顾下你的核心校验需求:

  • 必须是绝对路径(以/开头,或单独的/)
  • 禁止以/proc、/dev、/sys、/run、/boot、/root这些目录开头(包括目录本身及其子路径)
  • 路径中不能包含空格
  • 路径末尾可以带/或不带

适配RE2的正则表达式

这里给出一个完全兼容RE2的正则,能覆盖你列出的所有测试用例:

^/$|^/([^pdsbr]|p[^r]|pr[^o]|pro[^c]|d[^e]|de[^v]|s[^y]|sy[^s]|r[^u]|ru[^n]|r[^o]|ro[^o]|roo[^t]|b[^o]|bo[^o]|boo[^t])[^/ ]*(/[^/ ]*)*/?$

正则逻辑拆解

这个正则通过正向匹配+枚举排除禁止前缀的方式实现,分为两个分支(用|分隔):

  1. ^/$:匹配单独的根路径/
  2. 第二个分支匹配所有合法的非根绝对路径,核心逻辑拆解:
    • ^/:确保路径是绝对路径
    • ([^pdsbr]|p[^r]|pr[^o]|pro[^c]|d[^e]|de[^v]|s[^y]|sy[^s]|r[^u]|ru[^n]|r[^o]|ro[^o]|roo[^t]|b[^o]|bo[^o]|boo[^t]):这部分用来精准排除禁止的顶级目录:
      • [^pdsbr]:匹配首字母不是p/d/s/r/b的目录(这些是禁止目录的首字母)
      • 后面的p[^r]、pr[^o]等:匹配首字母是禁止目录的首字母,但后续字符不构成完整禁止目录名的情况(比如/pabc是合法的,但/proc会被排除)
    • [^/ ]*:匹配目录名的剩余部分,确保没有空格和/
    • (/[^/ ]*):匹配后续的子目录(可选,通过*实现)
    • /?$:允许路径末尾带一个可选的/

测试验证

这个正则能完全匹配你列出的所有有效路径,同时拒绝所有无效路径:

  • 有效路径:/、/home、/home/、/home/username/、/home/username、/var → 全部匹配成功
  • 无效路径:home、/root、/proc、/dev/等 → 全部匹配失败

在Kubernetes CRD中的使用示例

把这个正则放到你的CRD schema的pattern字段中即可:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: your-resources.example.com
spec:
  group: example.com
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                targetPath:
                  type: string
                  pattern: '^/$|^/([^pdsbr]|p[^r]|pr[^o]|pro[^c]|d[^e]|de[^v]|s[^y]|sy[^s]|r[^u]|ru[^n]|r[^o]|ro[^o]|roo[^t]|b[^o]|bo[^o]|boo[^t])[^/ ]*(/[^/ ]*)*/?$'
              required: [targetPath]
  scope: Namespaced
  names:
    plural: your-resources
    singular: your-resource
    kind: YourResource

备注:内容来源于stack exchange,提问作者Mykhailo Shyshov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:03:00