我想使用regex包获取括号内所有标签的索引。
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-]+)\]
,以便在括号中有多个标记时我也可以匹配comman
答案 0 :(得分:1)
我想在@Avinash Raj的答案中发表评论,但我没有申请报告......所以:
好像你想要这样的东西,
...
\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]
提供的正则表达式将仅匹配字符串中的第一对和最后一对key = value。有类似的东西:
[tag=val,tag1=val1,tag2=val2,tag3=val3]
正则表达式仅匹配tag
,val
,tag3
和val3
。
如果你想匹配所有这些我建议使用pure go而不使用正则表达式。这一点应该在go中几乎是直截了当的。
如果您实际上只需要匹配的索引,则可以使用上面的正则表达式,然后以其他方式解析标记。
答案 1 :(得分:0)
好像你想要这样的东西,
(?<!\w)\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]
OR
\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]
\B
匹配两个单词字符或两个非单词字符。
答案 2 :(得分:0)
golang Regexp包接受的正确regexp在多个括号中选择标记表达式是:
rg := regexp.MustCompile(`\[([\w-]+)=([\w-]+)(?:,([\w-]+)=([\w-]+))*\]`)
看,如果这就是你要找的......
更新:刚刚意识到它已经被@ndyakov回答了。