我的查询字符串的正则表达式只匹配一个值

Regex for my query string matches only one value

请帮助我创建好的正则表达式。我有这样一个字符串: 'text&variable=tekst2&categories=metal;wood&author:elvis;arnold' 我需要将所有类别检索为分隔的字符串,因此结果应该是 2 个字符串:'metal''wood'。 如果是三个或四个类别,结果应该是三个或四个分隔的字符串。

我创建了我的 reges,但它只给出了一个字符串。

/(?<=&categories=).*?([^;&]+)/

在线演示在那里: https://regex101.com/r/G6pRUQ/2

如何获得给出所有类别的正则表达式?

我不确定您使用的是哪种语言,但在 Java 我会使用以下代码:

String str = "text&variable=tekst2&categories=metal;wood&author:elvis;arnold";
Pattern pattern = Pattern.compile("&categories=(.*?)&");
Matcher matcher = pattern.matcher();
ArrayList<String> categories = new ArrayList<>();
while(matcher.find()){
    categories.add(matcher.group(1));
}

请检查您使用的语言的语法。但基本逻辑与上面类似。

PCRE 正则表达式将类别匹配为多个匹配项,使用

(?:\G(?!\A);*|[&?]categories=)\K[^;&]+

参见regex demo

详情:

  • (?:\G(?!\A);*|[&?]categories=) - 匹配&?categories=或上一次成功匹配的结尾和0+分号
  • \K - 省略目前匹配的文本
  • [^;&]+ - ;&.
  • 以外的 1 个或多个字符