首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获URL中斜杠之间的Regex重复字符串

捕获URL中斜杠之间的Regex重复字符串
EN

Stack Overflow用户
提问于 2017-10-29 08:41:35
回答 1查看 328关注 0票数 0

我有以下部分URL,可以是

/it/xyz/test/param+1/param-2/1234/gfd4

首先是两个字母,一个斜杠,另一个未知字符串,然后是斜杠之间的一系列可重复字符串,我需要捕获每个字符串(我知道带有/定界符的拆分可以很好,但我想知道如何用regex提取)。我首先说的是这个:

代码语言:javascript
复制
^\/([a-zA-Z]{2})\/([a-zA-Z]{1,10})(\/[a-zA-Z1-9\+\-]+)

但它只捕捉到

group1: it group2: xyz group3: /test

当然,它忽略了字符串的其余部分。

如果我在结尾加上一个*符号,它只捕捉到最后一句:

代码语言:javascript
复制
^\/([a-zA-Z]{2})\/([a-zA-Z]{1,10})(\/[a-zA-Z1-9\+\-]+)*

group1: it group2: xyz group3: /gfd4

因此,我显然缺少一些基本面,因此,除了适当的正则表达式,我想有一个解释。

我将其标记为Java,因为解析正则表达式的引擎是JDK 7。据我所知,每个引擎可能有不同之处。

EN

回答 1

Stack Overflow用户

发布于 2017-10-29 08:46:47

作为这里提到的,这是预期的:

使用模式中的一个组,您只能在该组中得到一个确切的结果。 如果捕获组被模式重复(在周围的非捕获组中使用了+量词),则只存储与其匹配的最后一个值。

我宁愿在group3 ((\/.*$),作为在这个演示中)中捕获字符串的其余部分,然后在'/‘周围使用一个分隔符。或将yhat模式应用于字符串的其余部分:

代码语言:javascript
复制
Pattern p = Pattern.compile("(\/[a-zA-Z1-9\+\-]+)");
Matcher m = p.matcher(str);
while (m.find()) {
    String place = m.group(1);
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46998323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档