簡體   English   中英

Java:如何獲取“ http://”和“ /”之后的第一個之間的文本? 在第一次出現“ /”之后?

[英]Java : how to get text between “http://” and first following “/” occurence ? And after first “/” occurence?

我仍然是Java的正則表達式,“ regex”等的新手。

如果我有這樣的網址:“ http://somedomain.someextention/somefolder/.../someotherfolder/somepage

最簡單的方法是:

  • “ somedomain.someextension”?
  • “ somefolder /.../ someotherfolder / somepage”?
  • “某網頁”?

謝謝 !

您不必(也許不應該)在這里使用正則表達式。 而是使用定義的類來處理此類事情。 例如,您可以使用URLURIFile

String address = "http://somedomain.someextention/somefolder/.../someotherfolder/somepage";

URL url = new URL(address);
File file = new File(url.getPath());

System.out.println(url.getHost());
System.out.println(url.getPath());
System.out.println(file.getName());

出站:

somedomain.someextention
/somefolder/.../someotherfolder/somepage
somepage

現在,您需要在資源路徑的開頭刪除/ 如果資源以/開頭,則可以在此處使用substring(1)


但是,如果您真的必須使用正則表達式,可以嘗試

^https?://([^/]+)/(.*/([^/]+))$

現在

  • 組1將包含主機名,
  • 第2組將包含資源的路徑
  • 第3組將包含資源名稱

獲取這些組件的最佳方法是使用URI類。 例如

    URI uri = new URI(str);
    String domain = uri.getHost();
    String path = uri.getPath();
    int pos = path.lastIndex("/");
    ...
    // or use File to parse the path string.

可以使用原始url字符串上的正則表達式完成此操作,但是存在無法正確處理URL中可能存在的所有可變性的風險。 (提示:@Pchenko提供的正則表達式不是:-))並且您肯定需要使用解碼器來處理可能的百分比編碼。

這不是正則表達式或URI使用,而是簡單的子字符串代碼作為練習材料。 缺少一些特殊情況的格式驗證。

int lastDelim = str.lastIndexOf('/);
if (lastDelim<0) throw new IllegalArgumentException("Invalid url");
int startIdx = str.indexOf("//");
startIdx = startIdx<0 ? 0 : startIdx+2;
int pathDelim = str.indexOf('/', startIdx);
String domain = str.substring(startIdx, pathDelim);
String path = str.substring(pathDelim+1, lastDelim);
String page = str.substring(lastDelim+1);

如果您想使用正則表達式來解碼URL而不是使用URI類(如先前的答案中所述),則下面的鏈接提供了一個很好的正則表達式教程,並且還解釋了如何解碼示例URL。 您可以在那里學習並嘗試。

http://www.beedub.com/book/2nd/regexp.doc.html

它不是正則表達式,也不是可擴展的,但是可以:

public class SomeClass
{
    public static void main(String[] args)
    {

        SomeClass sclass = new SomeClass();
        String[] string = 
            sclass.parseURL("http://somedomain.someextention/somefolder/.../someotherfolder/somepage");

        System.out.println(string[0]);
        System.out.println(string[1]);
        System.out.println(string[2]);
    }

    private String[] parseURL(String url)
    {
        String part1 = url.substring("http://".length(), url.indexOf("/", "http://".length()));

        String part2 = url.substring("http://".length() + part1.length() + 1, url.lastIndexOf("/"));

        String part3 = url = url.substring(url.lastIndexOf("/") + 1);

        return new String[] { part1, part2, part3 };
    }
}

輸出:

somedomain.someextention
somefolder/.../someotherfolder
somepage

暫無
暫無

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

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