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

时间:2016-10-28 17:34:10

标签: regex query-string pcre

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

我创造了我的灵魂,但它只给了一个字符串。

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

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

如何获得可以提供所有类别的正则表达式?

2 个答案:

答案 0 :(得分:2)

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

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

请参阅regex demo

<强>详情:

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

答案 1 :(得分:0)

我不确定您使用的是哪种语言,但在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));
}

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