去Regexp匹配之间的字符

时间:2014-10-21 18:24:03

标签: regex go

我有内容我想从字符串中删除

s:=`Hello! <something>My friend</something>this is some <b>content</b>.`

我希望能够替换<b>content</b><something>My friend</something>,以便字符串

`Hello! this is some .`

基本上,我希望能够删除<.*>

之间的任何内容

但问题是正则表达式与<something>My friend</something> this is some <b>content</b>匹配,因为golang匹配第一个<到最后一个>

2 个答案:

答案 0 :(得分:2)

Go的regexp没有回溯,所以你不能像在perl中那样使用<(.*?)>.*?</\1>

但是,如果您不关心结束标记是否匹配,则可以使用:

<.*?/.*?>

刚刚看到你的更新,.*是一个贪婪的运算符,它将匹配其间的所有内容,你必须使用非贪婪匹配(又名.*?)。

play

答案 1 :(得分:2)

*greedy运算符,意味着它将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。在这种情况下,我建议使用否定的字符类,因为不支持反向引用。

s := "Hello! <something>My friend</something>this is some <b>content</b>."
re := regexp.MustCompile("<[^/]*/[^>]*>")
fmt.Println(re.ReplaceAllString(s, ""))   

Go Playground