捕获正则表达式中的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);
...
}