regex - 如何在X出现模式后匹配子字符串?

时间:2017-01-31 04:53:47

标签: regex go

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中使用了这些regexp。

1 个答案:

答案 0 :(得分:6)

执行:

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

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

Demo

虽然我们在这,但你应该看看字符串操作而不是昂贵的正则表达式实现,普通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])
}