gpt4 book ai didi

正则表达式 - 如何在模式出现 X 次后匹配子字符串?

转载 作者:IT王子 更新时间:2023-10-29 01:26:23 24 4
gpt4 key购买 nike

ab1-cde23-fg45-h6-ijk-789.lmn.local.        86400 IN A  12.34.5.123

在接下来的 DNS 条目中,我尝试匹配 h6 部分(位置 4)。此时,我知道域的这一部分仅由 2 个字母/数字或各一个组成,因此我可以(以笨拙的方式)将其与

"-[a-zA-Z0-9]{2}-"

如果我不能假设这是域中唯一有 2 个字母/数字的部分,我怎么能只匹配第 4 个位置减去 - 的内容?(ab1 是第一个位置,cde23 第二个位置,以此类推,所有位置由 - 分隔)

我可以使用以下正则表达式匹配到第 4 个位置,但它从一开始就包含所有内容。

"([a-zA-Z0-9]*-){3}[a-zA-Z0-9]*-"

我在 golang 中使用这些正则表达式。

最佳答案

做:

^(?:[^-]+-){3}([^-]+)
  • ^(?:[^-]+-){3} 匹配 - 分隔的前 3 个字段,(?:) 使组不捕获

  • 捕获的组 ([^-]+) 将包含 - 分隔的第 4 个字段。

Demo


当我们在这里时,您也许应该看看字符串操作而不是昂贵的 Regex 实现,普通的 strings.Split() 应该这样做:

package main

import (
"fmt"
"strings"
)

func main() {
s := "ab1-cde23-fg45-h6-ijk-789.lmn.local. 86400 IN A 12.34.5.123"
fmt.Println(strings.Split(s, "-")[3])
}

关于正则表达式 - 如何在模式出现 X 次后匹配子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com