正则表达式在字符串中找到很多单词

时间:2019-04-01 08:19:01

标签: regex go

我想让所有工作都在字符串中-在一对{word}之间

示例:

payment://pay?id={appid}&transtoken={transtoken}

预期结果:

["appid", "transtoken"]

正则表达式为{\w+},我只能得到[{appid}, {transtoken}]

请帮助我解决这个问题。

2 个答案:

答案 0 :(得分:3)

您可以对FindAllStringSubmatch使用以下模式:

{(\w+)}

请参阅Go regexp文档:

  

FindAllStringSubmatchFindStringSubmatch的“全部”版本;它返回表达式的所有连续匹配的一部分,如程序包注释中的“全部”描述所定义。返回值nil表示不匹配。

  

FindStringSubmatch返回包含s 中正则表达式最左侧匹配的文本以及子定义的匹配项(如果有)的字符串切片通过包注释中的“子匹配”描述。返回值nil表示不匹配。

请参见Go demo

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := `payment://pay?id={appid}&transtoken={transtoken}`
    rex := regexp.MustCompile(`{(\w+)}`)
    results := rex.FindAllStringSubmatch(s,-1)
    for _, value := range results  {
        fmt.Printf("%q\n", value[1])
    }
}

输出:

"appid"
"transtoken"

答案 1 :(得分:-1)

代码:

String example = "payment://pay?id={appid}&transtoken={transtoken}";
Matcher m = Pattern.compile("\\{(.+?)\\}").matcher(example);
while (m.find()){
System.out.println(m.group(1));
}

输出:

appid
transtoken

我希望这对您有帮助...