我有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
获得此功能?
感谢
答案 0 :(得分:3)
有些人在遇到问题时会想“我知道,我会用 正则表达式。“现在他们有两个问题。
(有关背景,请参阅here)
为什么要使用正则表达式?也许更简单的解决方案是使用String.split("/")
,它为您提供原始字符串的子字符串数组,由/
分割。有关详细信息,请参阅this question。
请注意,String.split()实际上确实采用正则表达式来确定要拆分的边界。但是,在这种情况下您不需要正则表达式,并且简单的字符规范就足够了。
答案 1 :(得分:2)
尝试使用以下正则表达式并使用基于括号()分组的正则表达式分组功能。
\.[a-zA-Z]{2,3}(/.*)
模式描述:
点后跟两个或三个字母,然后是正斜杠,然后是任何字符
示例代码:
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)
答案 5 :(得分:1)
尝试这个并使用第二个捕获组
(.*?)(/.*)