捕获正则表达式中的URL

问题描述:

重复我具有以下,可以是捕获正则表达式中的URL

/它/ XYZ /测试/ PARAM + 1/PARAM-2/1234/gfd4

基本上两个字母的部分URL斜线之间串在开始时斜线另一个未知的字符串,然后斜线之间的一系列可重复的字符串 我需要捕获每个字符串(我知道与/分隔符分裂将罚款,但我有兴趣知道如何可以提取与正则表达式)。我来到了第一本:

^\/([a-zA-Z]{2})\/([a-zA-Z]{1,10})(\/[a-zA-Z1-9\+\-]+) 

,但它只能捕捉

组1:它 组2:XYZ 第3组:/测试

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

如果我在最后加*号,只抓住了最后一句:

^\/([a-zA-Z]{2})\/([a-zA-Z]{1,10})(\/[a-zA-Z1-9\+\-]+)* 

组1:它 组2:XYZ 第3组:/ gfd4

所以,我明显缺少一些基础知识,所以除了正确的正则表达式之外,我想解释一下。

我标记为Java,因为解析正则表达式的引擎是JDK 7.我知道每个引擎可能有差异。

由于mentioned here,这种预期:

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

我宁愿捕捉第3组的字符串的其余部分((\/.*$),如in this demo),然后使用拆分围绕“/”。或在字符串的其余部分应用yhat图案:

Pattern p = Pattern.compile("(\/[a-zA-Z1-9\+\-]+)"); 
Matcher m = p.matcher(str); 
while (m.find()) { 
    String place = m.group(1); 
    ... 
}