使用java regex获取链接的最后一部分

时间:2014-06-12 10:06:57

标签: java regex

我有arraylist个链接。所有链接都具有相同的格式abc.([a-z]*)/\\d{4}/

List<String > links= new ArrayList<>();
        links.add("abc.com/2012/aa");
        links.add("abc.com/2014/dddd");
        links.add("abc.in/2012/aa");

我需要获取每个链接的最后一部分。即域名之后的部分。域名可以是任何东西(.com,.in,.edu等)。

/2012/aa
/2014/dddd
/2012/aa

这是我想要的输出。如何使用regex获得此功能? 感谢

6 个答案:

答案 0 :(得分:3)

  

有些人在遇到问题时会想“我知道,我会用   正则表达式。“现在他们有两个问题。

(有关背景,请参阅here

为什么要使用正则表达式?也许更简单的解决方案是使用String.split("/"),它为您提供原始字符串的子字符串数组,由/分割。有关详细信息,请参阅this question

请注意,String.split()实际上确实采用正则表达式来确定要拆分的边界。但是,在这种情况下您不需要正则表达式,并且简单的字符规范就足够了。

答案 1 :(得分:2)

尝试使用以下正则表达式并使用基于括号()分组的正则表达式分组功能。

\.[a-zA-Z]{2,3}(/.*)

模式描述

点后跟两个或三个字母,然后是正斜杠,然后是任何字符

DEMO

示例代码:

Pattern pattern = Pattern.compile("\\.[a-zA-Z]{2,3}(/.*)");
Matcher matcher = pattern.matcher("abc.com/2012/aa");

if (matcher.find()) {
    System.out.println(matcher.group(1));
}

输出:

/2012/aa

注意:

如果模式中总有4位数字,您可以使用\\.[a-zA-Z]{2,3}(/\\d{4}/.*)使其更精确。

答案 2 :(得分:1)

例如

String s="abc.com/2014/dddd";
System.out.println(s.substring(s.indexOf('/')));

<强>输出

/2014/dddd

或者你可以使用split方法。

System.out.println(s.split("/",2)[1]);//OUTPUT:2014/dddd --->you need to add /

答案 3 :(得分:1)

String result = s.replaceAll("^[^/]*","");

s将是您列表中的字符串。

答案 4 :(得分:1)

  

有些人在面对问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题。

为什么不使用URI类?

output = new URI(link).getPath()

答案 5 :(得分:1)

尝试这个并使用第二个捕获组

(.*?)(/.*)