我有以下字符串:
my-name-host1.host2.host3.com:80
我正在寻找一个与所有内容匹配的正则表达式,直到字符串-host1.host2.host3.com:80
,即结果应为:
我的名字
我当前的JavaScript正则表达式似乎可以正常工作。问题是我需要具有“ Golang风格”的正则表达式。
https://regex101.com/r/ebSTuq/1
将其切换到Golang时,出现此正则表达式,出现模式错误:
.*(?=\Q-host1.host2.host3.com:80\E)
前面的令牌是不可量化的。
答案 0 :(得分:1)
Go regex引擎为RE2,RE2 does not support lookarounds。
实际上,您不需要先行操作:在开始时使用非贪婪的点模式,将其捕获到第1组中,然后使用其余模式来检查右侧上下文:
str := `my-name-host1.host2.host3.com:80`
re := regexp.MustCompile(`(.*?)-host1\.host2\.host3\.com:80`)
match := re.FindStringSubmatch(str)
fmt.Println(match[1])
输出:my-name
,请参见Go demo。
请注意,使用FindStringSubmatch
function可以访问捕获的子字符串。
另外,请参见Go regex demo。