2011-11-10 28 views
3

這是我到目前爲止有:如何在句子的URL末尾解析一段時間?

/(^|\s)(http:\/\/(\S+)(?!(.png|.gif|.jpg)($|\.\s|\.$|\s)))($|\.\s|\.$|\s)/i 

而我取代它,像這樣:

'$1<a href="$2">$2</a>$6' 

有時候,我的用戶鍵入的是這樣的:http://google.com。 < - 如何在不解析網址中的其他時段的情況下避免包含最後期限?

此外,如果你想知道什麼.gif .png等,我解析出圖像自動創建元素。

編輯: 這是爲PHP。

這是一個論壇,用戶發佈很多東西,包括鏈接。它成功處理除URL之後的標點符號之外的所有情況。編輯2: 解析出可能是錯誤的詞我並沒有試圖去除標點符號,只是將它與URL分開,這樣我就可以向我的用戶顯示一個工作鏈接。

編輯3: http://daringfireball.net/2010/07/improved_regex_for_matching_urls 我還沒有完全測試,但它似乎工作。在我測試完成後,我會讓它成爲一個解決方案。或者如果其他人想要點數,請隨時測試,我會爲您的解決方案投票。

+0

如果您不必使用正則表達式,更簡單高效的解決方案是檢查字符串的最後一個字符是否爲句號,然後將其刪除。 –

+2

這是什麼語言? –

回答

1

所以更新的解決方案:

/\b(http:\/\/(\S+(?<!\.)(?=(?:$|\s|\.(?:$|\s)))))(?<!(?:\.(?:png|gif|jpg)))/i 

看到它here online on Regexr

我換成你(^|\s)通過\b那是一個字的邊界,這正是你想要的這裏。

對你的(\S+)我改爲(\S+(?<!\.)(?=(?:$|\s|\.(?:$|\s))))。基本上我會匹配每個非空白字符,直到前面有$|\s|\.(?:$|\s),左邊沒有點((?<!\.)部分)。

以下四處需要看看後面。

然後我打掃你的支架和交替位並使用一些非捕獲組(與(?:啓動組)

因此,對於您的測試字符串users type something like this: http://google.com. <- How do I avoid將第一組和google.com在匹配http://google.com本在第二組中。

+0

我喜歡很多這些變化,但是當字符串中有多個URL,它將第二個URL保留爲字符串(wh ich我的原始正確處理)。 – Stephane

+0

@Stephane因此,它不是在多個URL上失敗,它在最後沒有點的URL上失敗。更正了正則表達式並更新了Regexr鏈接。現在有點複雜了。 – stema

+0

太棒了!非常感謝。 – Stephane

1

PHP解決方案:

$line = 'http://www.google.com.'; 

echo preg_replace(
    "/(\s*)((http:\/\/)?(\S+?(.png|.gif|.jpg)?))(\W*)$/i", 
    '$1<a href="$2">$2</a>$6', 
    $line), "\n"; 
+0

我正在使用它來用PHP中的鏈接替換URL。我不想剝奪任何東西。 – Stephane

+0

添加了一些應該讓你關閉的php代碼。 – bigendian

+0

好的,但你能匹配並創建一個鏈接,我現在在http://google.com上輸入內容。它並不總是在最後! Stackoverflow正確! – Stephane

相關問題