2013-03-06 28 views
-2

有大量的解決方案來查找和/或解析普通URL,但是它們都不處理任意文本,即分成多行的URL。你如何找到可以在任何角色後換行的URL?如何查找純文本中的任意URL?

注意:我對URL的各個部分不感興趣。我只想查找給定文本中的所有URL,以將它們轉換爲鏈接(例如,使用普通的電子郵件文本)。

實施例:

Text text text text text. Look at this: 
http://stackoverfl 
ow.com/ 
questions/15252042/ 
find-urls-in-text 

Question question question. 
+1

請舉例 – alestanis 2013-03-06 15:56:46

+0

是的,請舉例說明您正在談論的內容 – 2013-03-06 15:57:08

+2

您問「如何找到可以在任何字符之後換行的網址?」我不認爲你有任何可靠的方式來做到這一點。有時廢話數據是廢話數據,你不能對它做任何事情。 – 2013-03-06 16:24:57

回答

0

幾種方法是可能的:

1)寫入與空格規則正則表達式的每個定期炭後。這肯定會打破正則表達式模式,但卻是最靈活的模式。捕捉換行符使用DOT_ALL模式。然而,DOT_ALL將產生與下一種方法相同的問題。

2)(暫時)刪除換行符並使用正常的正則表達式模式匹配。這種方法存在一些問題,因爲它可能發生的情況是包含的文本超過了必要的(在URL的末尾),或者沒有找到URL(如果換行開始,搞亂了協議字符串)。 2a)對2)的修改可能是進行幾次匹配嘗試,只去除特定的換行符,例如,在尋找最初的URL部分(例如www,http等)之後。只有在識別時間爲次要時纔有可能。

3)使用特定領域的知識來簡化您的任務。例如,如果您知道哪裏出現換行符(或者它們是否只出現在特定位置),請查找這些特定情況並先解決它們。然後返回到通常的正則表達式搜索。 (3)3)的一種變化可以是使用具有完整空白規則的正則表達式專門查找協議和頁面擴展,以查找URL的開始和停止。這顯然只有在總是有一個協議/ filename_with_extension時纔有效。將找到的標記轉換爲沒有空格的常規標記(但在協議之前和擴展之後包含一個空格),然後刪除文本中的所有換行符。現在,您可以將URL與常規正則表達式匹配。

確實有更多的變化可能,但總的想法是一樣的。