2010-11-06 67 views
0

我想從一個純文本字符串在PHP中提取一個或多個網址。下面是一些例子從一個字符串提取一個或多個網址在php

"mydomain.com has hit the headlines again" 

提取物 「http://www.mydomain.com

"this is 1 domain.com and this is anotherdomain.co.uk but sometimes http://thirddomain.net" 

提取物 「http://www.domain.com」, 「http://www.anotherdomain.co.uk」, 「http://www.thirddomain.net

有兩種特殊情況下,我需要的 - 我想正則表達式,但不完全瞭解它們
1)需要刪除像'('或')'和空格(不包括連字符)的所有符號
)字點需要用符號替換。 ,所以網絡com將.com .com

p.s我知道PHP validation/regex for URL,但不能解決我將如何使用它來實現最終目標。

謝謝

+3

'mydomain.com = HTTP:// www.mydomain.com' – NikiC 2010-11-06 09:36:52

回答

4

在這種情況下,將很難得到100%正確的結果。 根據輸入您可以嘗試強制只是匹配最流行的第一級域(添加更多的話):

(?:https?://)?[a-zA-Z0-9\-\.]+\.(?:com|org|net|biz|edu|uk|ly|gov)\b 

您可能需要刪除該單詞邊界(\ b)中得到不同的結果。

你可以在這裏進行測試:

http://bit.ly/dlrgzQ

編輯:關於你的情況下 1)刪除了什麼? 2),這可能在PHP來實現,如:

$result = preg_replace('/\s+dot\s+(?=(com|org|net|biz|edu|and_ect))/', '.', $input); 

但我有幾個重要事項:

  • 這個表達式更像是指導,而不是實際生產代碼
  • 與這種工作對文本的寬鬆規則至少是古怪的 - 並且增加更多特殊情況會使其更加糟糕。考慮這一點 - 即使計算器沒有做到這一點:

http://example.org

但不!

將example.org

  • ,如果你說你有什麼要實現它會更容易?因爲如果你想處理某種在WWW某處的文本,那麼這是非常糟糕的主意!你不應該這樣做(正如你所說 - 你不明白Regex!),因爲這只是XSS蠕蟲的可能。最好考慮某種降價語言或BBCore或其他。

還可以獲得感興趣:http://htmlpurifier.org/

+1

+1,但你可能要加上'[AZ] {2}'爲一個替代頂級域名,允許國際和特殊域名,如'amazon.de','apple.tv'等(並從列表中刪除'uk'和'ly')。如果你想匹配這樣的域名。 – 2010-11-06 10:56:28

相關問題