【问题标题】:Regex for my query string matches only one value我的查询字符串的正则表达式仅匹配一个值
【发布时间】:2016-10-28 17:34:10
【问题描述】:
请帮助我创建好的正则表达式。我有这样一个字符串:
'text&variable=tekst2&categories=metal;wood&author:elvis;arnold'
我需要将所有类别作为分隔字符串检索,因此结果应该是 2 个字符串:'metal' 和 'wood'。
如果是三个或四个类别,则结果应该是三个或四个单独的字符串。
我创建了我的reges,但它只给出了一个字符串。
/(?<=&categories=).*?([^;&]+)/
在线演示在那里:
https://regex101.com/r/G6pRUQ/2
如何获得可以提供所有类别的正则表达式?
【问题讨论】:
标签:
regex
query-string
pcre
【解决方案1】:
将类别匹配为多个匹配项的 PCRE 正则表达式,使用
(?:\G(?!\A);*|[&?]categories=)\K[^;&]+
请参阅regex demo。
详情:
-
(?:\G(?!\A);*|[&?]categories=) - 匹配 & 或 ?、categories=,或上一次成功匹配的结尾和 0+ 个分号
-
\K - 省略目前匹配的文本
-
[^;&]+ - 除; 和& 之外的1 个或多个字符。
【解决方案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));
}
请检查您使用的语言的语法。但基本逻辑和上面类似。