go 的 regexp 包不支持零宽度外观 . 您可以使用 regexp.FindAllStringSubmatch() 函数利用捕获的分组:
package main
import (
"regexp"
"fmt"
)
func main() {
str := "foo(bar)foo(baz)golang"
rex := regexp.MustCompile(`\(([^)]+)\)`)
out := rex.FindAllStringSubmatch(str, -1)
for _, i := range out {
fmt.Println(i[1])
}
}
输出:
bar
baz
正则表达式 \(([^)]+)\) :
\( 匹配文字 (
([^)]+) 匹配substring upto next ) 并将匹配放入捕获的组中,在这里你可以使用非绿色匹配 .*?\)
package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`\((.*?)\)`)
var str = `foo(bar)foo(baz)golang`
mt:= re.FindAllStringSubmatch(str, -1)
for _, i := range mt {
fmt.Println(i[1])
}
}
2 回答
go
的regexp
包不支持零宽度外观 . 您可以使用regexp.FindAllStringSubmatch()
函数利用捕获的分组:输出:
正则表达式
\(([^)]+)\)
:\(
匹配文字(
([^)]+)
匹配substring upto next)
并将匹配放入捕获的组中,在这里你可以使用非绿色匹配.*?\)
\)
匹配文字)
Go playground demo
试试这个:
Explanation
代码示例:
Run the go code here