package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?iU)<\s*tag\b[^>]*?(?<=\s)attribute1\s*=\s*\"([^\"]*)\"[^>]*>`)
var str = `<tag attribute1="'text123'" />
<TAG attribute2="'true'" attribute1="'text1'"/>
<tag attribute2="'true'"/>
< tag
type="apple" title="Golden apple"
ATTRIBUTE1="value" />
<!-- This one should not match -->
<tagger attribute1="something">
<!-- But this one yes -->
<tag data-id="6735"
attribute1="'some more text'"
required >
Whatever in here
</tag>
</tagger>
<!--
Should not match if "attribute1" is part of an other attribute name.
As attributes can contain a hyphen, we can't use \battribute1 because \b
will not consider the hyphen as part of a word. This is why we have to
use the positive lookbehind (?<=\s)
-->
<tag matching="false" data-attribute1="" />`
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/