正则表达式用于匹配所有内容,直到Golang风格的字符串首次出现

时间:2019-05-09 11:57:48

标签: regex

我有以下字符串:

  

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)

  

前面的令牌是不可量化的。

1 个答案:

答案 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