Regex найти много слов в строке - PullRequest
2 голосов
/ 01 апреля 2019

Я хочу получить всю работу в строке - между парой {word}

Пример:

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

Ожидаемый результат:

["appid", "transtoken"]

С регулярным выражением: {\w+}, я могу получить только [{appid}, {transtoken}].

Пожалуйста, помогите мне с проблемой.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Вы можете использовать следующий шаблон с FindAllStringSubmatch:

{(\w+)}

См. Документацию Go regexp:

FindAllStringSubmatch - это 'Все версии FindStringSubmatch;он возвращает фрагмент всех последовательных совпадений выражения, как определено описанием «Все» в комментарии пакета.Возвращаемое значение nil указывает на отсутствие совпадения.

и

FindStringSubmatch возвращает фрагмент строки, содержащий текст крайнего левого соответствия регулярного выражения в s и совпадения, если таковые имеются, его подвыражений , как определено описанием «Подстрок» ​​в комментарии к пакету.Возвращаемое значение nil указывает на отсутствие совпадения.

См. Демонстрацию Go :

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"
0 голосов
/ 01 апреля 2019

Код:

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

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...