使用正则表达式匹配带有括号的标签

我想使用正则表达式包获取括号内所有标签的索引。


str := "[tag=blue]Hello [tag2=red,tag3=blue]Good"

rg := regexp.MustCompile(`(?:^|\W)\[([\w-]+)=([\w-]+)\]`)

rgi := fmtRegex.FindAllStringIndex(str, -1)

fmt.Println(rgi)

// Want index for:

// [tag=blue], [tag2=red,tag3=blue]

正则表达式需要返回 [tag=blue], [tag2=red,tag3=blue] 的索引


但它只返回[tag=blue].


如何修复此正则表达式,(?:^|\W)\[([\w-]+)=([\w-]+)\]以便在括号中有多个标签时也可以匹配命令


慕尼黑8549860
浏览 136回答 3
3回答

慕妹3146593

我想对@Avinash Raj 的答案发表评论,但我没有足够的 Repotation ......所以:好像你想要这样的东西,...\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]提供的正则表达式将仅匹配字符串中的第一对和最后一对 key=value。有类似的东西:[tag=val,tag1=val1,tag2=val2,tag3=val3]正则表达式将只匹配tag,val,tag3和val3。如果你想匹配所有这些,我建议使用没有正则表达式的纯 go。这是应该几乎直接前进的事情。如果您实际上只需要匹配的索引,则可以使用上面的正则表达式,然后以其他方式解析标签。

慕少森

golang正则表达式包接受的正确的正则表达式选择多个括号中的标签表达式是:rg := regexp.MustCompile(`\[([\w-]+)=([\w-]+)(?:,([\w-]+)=([\w-]+))*\]`)看,如果那是你要找的...更新:刚刚意识到@ndyakov 已经回答了。

MM们

好像你想要这样的东西,(?<!\w)\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]或者\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]\B&nbsp;两个单词字符或两个非单词字符之间的匹配。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go