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。
答案 0 :(得分:6)
执行:
^(?:[^-]+-){3}([^-]+)
^(?:[^-]+-){3}
匹配-
分隔的前3个字段,(?:)
使该组无法捕获
捕获的群组([^-]+)
将包含-
分隔的第4个字段。
虽然我们在这,但你应该看看字符串操作而不是昂贵的正则表达式实现,普通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])
}