package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)^(?: # non-capture group (repeat)
(?| # branch reset for group 1
([^)(><\n])| # either non-bracket... or:
<(?=.*(>))| # if < open angle capture > to group 1
>(?=.*(<))| # if > capture opening < to group 1
\((?=.*(\)))| # same for (), if ( capture ) to group 1
\)(?=.*(\()) # if ) catpure ( to group 1
)(?=.*((?(2)\1\2|\1))$) # cond (2): if not outer chr (fwd ref)
)*? # as few as possible (lazy) / eof non-cap
[^)(><\n]? # the middle character (no parens)
\2$ # the right part (group 2 capture)`)
var str = `(_)tar<>rat(_)
)()_<(*&bab&*)>_()(
)(*?*)(
()<_<oxxo>_>()
<__>w(owiwo)w<__>
a(t<()((<oyo>))()>t)a
v
(_)tar<>rap(_)
)()_<(*&bab&*)>_))(
)(*?*)(.
()<-<oxxo>_>()
<__>w(ow(wo)w<__>
at<()((<oyo>))()>t)a`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Golang, please visit: https://golang.org/pkg/regexp/