【问题标题】:What's the meaning of the numbered placeholders in ingress rewrite-target?ingress rewrite-target 中编号占位符的含义是什么?
【发布时间】:2020-11-20 02:40:32
【问题描述】:

比如下面的manifest(来自https://kubernetes.github.io/ingress-nginx/examples/rewrite/),我知道任何被(.*)捕获的字符都会赋值给占位符$2,然后在rewrite-target注解中作为参数使用,但是为什么是 2 美元,而不是 1 美元和 3 美元?我在互联网上找不到任何解释差异的东西。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: rewrite
  namespace: default
spec:
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /something(/|$)(.*)

【问题讨论】:

  • 在正则表达式中,括号() 中的每个部分都被视为一个组,每个部分都被编号。第 0 组是整个比赛,第 1 组是第一组,依此类推。因此,在/something(/|$)(.*) 中,任何匹配 (/|$) 的都是第 1 组,任何匹配 (.*) 的都是第 2 组。$2 只是指组匹配的。
  • @Grismar 很好的答案,您介意在答案部分发布吗?

标签: regex kubernetes-ingress nginx-ingress


【解决方案1】:

在正则表达式中,括号() 中的每个部分都被视为一个组,并且每个部分都有编号。第 0 组是整场比赛,第 1 组是第一组,依此类推。

所以,在/something(/|$)(.*) 中,匹配(/|$) 的任何内容都是第1 组,匹配(.*) 的内容是第2 组。在您的示例中,$2 只是指匹配它的第2 组并将被替换就这样。

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多