【问题标题】:Go Regex to match tags with bracket使用正则表达式匹配带有括号的标签
【发布时间】:2015-02-19 23:40:38
【问题描述】:

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

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-]+)\],以便在括号中有多个标签时也可以匹配该命令

【问题讨论】:

    标签: regex go regex-negation


    【解决方案1】:

    我想对@Avinash Raj 的答案发表评论,但我没有足够的 Repotation... 所以:

    好像你想要这样的东西,

    ...

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

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

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

    正则表达式只会匹配tagvaltag3val3。 如果你想匹配所有这些,我建议使用不带正则表达式的纯 go。这在 go 中应该是直截了当的。

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

    【讨论】:

    • op 只想要匹配而不是我认为的组。
    【解决方案2】:

    好像你想要这样的东西,

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

    DEMO

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

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

    DEMO

    【讨论】:

      【解决方案3】:

      golang Regexp 包接受的选择多括号中标签表达式的正确正则表达式为:

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

      Playground

      看看,如果那是你要找的……

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多