簡體   English   中英

使用Java正則表達式獲取鏈接的最后一部分

[英]get the last portion of the link using java regex

我有一個arraylist鏈接。 所有具有相同格式abc.([az]*)/\\\\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來獲得它? 謝謝

有些人遇到問題時會想:“我知道,我將使用正則表達式。”現在,他們有兩個問題。

(有關背景,請參見此處

為什么使用正則表達式? 也許更簡單的解決方案是使用String.split("/") ,它為您提供原始字符串的子字符串數組,並用/分隔。 有關更多信息,請參見此問題

請注意,實際上String.split()確實使用了正則表達式來確定要分割的邊界。 但是,在這種情況下,您不需要正則表達式,並且簡單的字符說明就足夠了。

請嘗試使用以下正則表達式,並使用基於括號()分組的正則表達式分組功能。

\.[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}/.*)使其更精確。

例如

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 /
String result = s.replaceAll("^[^/]*","");

s將是列表中的字符串。

有些人遇到問題時會想:“我知道,我將使用正則表達式。”現在,他們有兩個問題。

為什么不只使用URI類呢?

output = new URI(link).getPath()

試試這個,並使用第二個捕獲組

(.*?)(/.*)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM