我想使用正则表达式包获取括号内所有标签的索引。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-]+)\]以便在括号中有多个标签时也可以匹配命令
3 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
我想对@Avinash Raj 的答案发表评论,但我没有足够的 Repotation ......所以:
好像你想要这样的东西,
...
\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]
提供的正则表达式将仅匹配字符串中的第一对和最后一对 key=value。有类似的东西:
[tag=val,tag1=val1,tag2=val2,tag3=val3]
正则表达式将只匹配tag
,val
,tag3
和val3
。如果你想匹配所有这些,我建议使用没有正则表达式的纯 go。这是应该几乎直接前进的事情。
如果您实际上只需要匹配的索引,则可以使用上面的正则表达式,然后以其他方式解析标签。
慕少森
TA贡献2019条经验 获得超9个赞
golang正则表达式包接受的正确的正则表达式选择多个括号中的标签表达式是:
rg := regexp.MustCompile(`\[([\w-]+)=([\w-]+)(?:,([\w-]+)=([\w-]+))*\]`)
看,如果那是你要找的...
更新:刚刚意识到@ndyakov 已经回答了。
MM们
TA贡献1886条经验 获得超2个赞
好像你想要这样的东西,
(?<!\w)\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]
或者
\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]
\B
两个单词字符或两个非单词字符之间的匹配。
- 3 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消