我的查询字符串的正则表达式只匹配一个值
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 个或多个字符
请帮助我创建好的正则表达式。我有这样一个字符串:
'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 个或多个字符