通过 Google RE2 风味正则表达式排除路径

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

我正在尝试通过

pattern
字段验证 Kubernetes CRD 中的字符串,该字段应该是有效的 Unix 路径,其中不包括多个目录,例如
/root
/boot
/dev
等。

这个想法是验证以下路径

有效路径:

  • /
  • /首页
  • /首页/
  • /首页/
  • /home/用户名/
  • /home/用户名
  • /var

无效路径:

  • 主页/用户名
  • 主页/用户名/
  • /根
  • /根/
  • 根/
  • 根/.config
  • /过程
  • /启动
  • /开发/

为了验证,我编写了以下正则表达式:

^(?!/(proc|dev|sys|run|boot|root)\\b)(/[^/ ]*)+/?$

它在 Python 中运行良好,结果如下:

/: True
/home: True
/home/: True
/home/: True
/home/username/: True
/home/username: True
/var: True
home: False
home/username: False
home/username/: False
/root: False
/root/: False
root: False
root/: False
root/.config: False
/proc: False
/boot: False
/dev/: False

但是,在 Kubernetes CRD 模式验证中,使用了 Google RE2 正则表达式风格,它不支持这种类型的否定前瞻并抛出以下错误:

Invalid value: "^(?!/(proc|dev|sys|run|boot|root)\\\\b)(/[^/ ]*)+/?$": must be a valid regular expression, but isn't: error parsing regexp: invalid or unsupported Perl syntax: `(?!`

有什么方法可以将正则表达式转换为这种风格吗?所有帮助将不胜感激。

regex go kubernetes re2
1个回答
0
投票

此正则表达式通过环视传递所有示例:

^\/(var|home(\/(username\/?)?)?)?$

参见https://rubular.com/r/v5W83q0jlOe059

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