2012-04-16 52 views
1

我有一個字符串爲:「這是一個URL http://www.google.com/MyDoc.pdf應該使用」子之間的兩個

我只需要提取從HTTP開始,在PDF結束的網址: http://www.google.com/MyDoc.pdf

String sLeftDelimiter = "http://"; 
String[] tempURL = sValueFromAddAtt.split(sLeftDelimiter); 
String sRequiredURL = sLeftDelimiter + tempURL[1]; 

這使我的輸出爲「http://www.google.com/MyDoc.pdf應該使用」

需要幫助的這一點。

+0

與此相關的問題,請檢查一下: [如何檢測URL字符串中的存在] [1] [1 ]:http://stackoverflow.com/questions/285619/how-to-detect-the-presence-of-url-in-a-string – Crazenezz 2012-04-16 08:50:06

回答

9

這樣的問題是什麼的正則表達式作了爲:前 「HTTP」 有

  • \b

    Pattern findUrl = Pattern.compile("\\bhttp.*?\\.pdf\\b"); 
    Matcher matcher = findUrl.matcher("This is a URL http://www.google.com/MyDoc.pdf which should be used"); 
    while (matcher.find()) { 
        System.out.println(matcher.group()); 
    } 
    

    正則表達式解釋是一個字邊界(即xhttp不匹配)

  • http字符串「HTTP」(注意,這也符合「HTTPS」和「httpsomething」)
  • .*?任何字符(.)任意次數(*),但嘗試使用的最少字符數量(?
  • \.pdf文字字符串「.pdf」
  • \b「.pdf」後面有一個單詞邊界(即.pdfoo不匹配)

如果你想只匹配http和https,嘗試在你的字符串使用這個代替http

  • https?\: - 這串HTTP,那麼匹配可選的「s」(在s之後由?指示),然後是冒號。
+0

非常感謝..這真的有所幫助...因爲之前的文本可以是任何東西,所以這個提取URL的正則表達式是我所需要的。 – 2012-04-16 09:06:20

+0

如果你想支持任意的URL或字符串,看起來像URL但沒有協議處理程序(例如www.foo.com),然後使用Gruber的正則表達式http://daringfireball.net/2010/ 07/improved_regex_for_matching_urls – 2012-04-16 09:13:35

1

你爲什麼不使用startsWith( 「HTTP://」)( 「PDF」)的endsWith String類的 mthods。

兩個方法返回布爾值,如果兩個返回,那麼你成功的條件否則你的條件失敗。

+0

該問題指出,他有一個字符串,其中包含「這是一個URL」應該使用的URL「。我沒有看到'startsWith()'和'endsWith()'在這裏適用。 – 2017-03-19 06:13:19

1

試試這個

String StringName="This is a URL http://www.google.com/MyDoc.pdf which should be used"; 

StringName=StringName.substring(StringName.indexOf("http:"),StringName.indexOf("which")); 
1

您可以在這裏使用Regular Expression電源。 首先你必須找到原始字符串Url然後刪除其他部分。

下面的代碼顯示我的建議:

String regex = "\\b(http|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; 
    String str = "This is a URL http://www.google.com/MyDoc.pdf which should be used"; 

    String[] splited = str.split(regex); 

    for(String current_part : splited) 
    { 
     str = str.replace(current_part, ""); 
    } 

    System.out.println(str); 

此代碼片段罐檢索任何網址與任何模式的任意字符串。 你不能在上面的正則表達式中添加自定義協議,如https協議部分。

我希望我的回答可以幫助您;)

+0

請注意,此模式不符合國際化域名,例如http://مثال.إختبار – 2012-04-17 11:42:55

0
public static String getStringBetweenStrings(String aString, String aPattern1, String aPattern2) { 
    String ret = null; 
    int pos1,pos2; 

    pos1 = aString.indexOf(aPattern1) + aPattern1.length(); 
    pos2 = aString.indexOf(aPattern2); 

    if ((pos1>0) && (pos2>0) && (pos2 > pos1)) { 
     return aString.substring(pos1, pos2); 
    } 

    return ret; 
}