繁体   English   中英

捕获正则表达式在URL中的斜线之间重复的字符串

[英]Capture Regex repeating string between slashes in URL

我有以下部分网址,可以是

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

基本上在开头两个字母是一个斜杠,另一个是未知字符串,然后是一系列在斜杠之间的可重复字符串,我需要捕获每个字符串(我知道用/分隔符进行拆分会很好,但是我很想知道如何使用正则表达式提取) 。 我首先出来的是这样的:

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

但它只能捕捉

group1:it group2:xyz group3:/ test

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

如果我在末尾加一个*号,它只会捕获最后一个句子:

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

group1:it group2:xyz group3:/ gfd4

因此,我显然缺少一些基本知识,因此除了适当的正则表达式外,我还想解释一下。

我标记为Java是因为解析正则表达式的引擎是JDK7。据我所知,每个引擎可能会有差异。

如此处所述 ,这是预期的:

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

我宁愿在group3( (\\/.*$)捕获字符串的其余部分,如本演示中所示 ),然后在'/'周围使用拆分。 或在字符串的其余部分上应用yhat模式:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM