Go Regex将标签与支架匹配

时间:2014-12-21 19:47:35

标签: regex go regex-negation

我想使用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

3 个答案:

答案 0 :(得分:1)

我想在@Avinash Raj的答案中发表评论,但我没有申请报告......所以:

  

好像你想要这样的东西,

     

...

     

\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]

提供的正则表达式将仅匹配字符串中的第一对和最后一对key = value。有类似的东西:

[tag=val,tag1=val1,tag2=val2,tag3=val3]

正则表达式仅匹配tagvaltag3val3。 如果你想匹配所有这些我建议使用pure go而不使用正则表达式。这一点应该在go中几乎是直截了当的。

如果您实际上只需要匹配的索引,则可以使用上面的正则表达式,然后以其他方式解析标记。

答案 1 :(得分:0)

好像你想要这样的东西,

(?<!\w)\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]

DEMO

OR

\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]

\B匹配两个单词字符或两个非单词字符。

DEMO

答案 2 :(得分:0)

golang Regexp包接受的正确regexp在多个括号中选择标记表达式是:

rg := regexp.MustCompile(`\[([\w-]+)=([\w-]+)(?:,([\w-]+)=([\w-]+))*\]`)

Playground

看,如果这就是你要找的......

更新:刚刚意识到它已经被@ndyakov回答了。