2011-05-25 84 views
5

我知道問題標題看起來很重複。但是我在這裏找不到的一些解決方案。通過PHP和正則表達式從文本字符串中查找網址?

我需要找到的URL格式的文本字符串:

$pattern = '`.*?((http|https)://[\w#$&+,\/:;[email protected]]+)[^\w#$&+,\/:;[email protected]]*?`i'; 

    if (preg_match_all($pattern,$url_string,$matches)) { 
     print_r($matches[1]); 
    } 

使用這種模式我能找到的網址與http://https://這是好。但我有用戶輸入那裏的人添加URL喜歡www.domain.com即使domain.com

所以,我需要先驗證串在那裏我可以與他們之前共同協議http://更換www.domain.comdomain.com。或者我需要用更好的模式來創作?

我不擅長正則表達式,不知道該怎麼做。

我的想法首先找到的網址與http://https://的把它們放在一個數組然後在文本字符串替換這些URL以空格(」「),然後使用其他模式來進行的。但我不確定使用什麼樣的模式。

我用這$url_string = preg_replace($pattern, ' ', $url_string);但如果去除任何www.domain.comdomain.com網址與http://https://

之間的兩個有效的URL或

如果你能幫助將是巨大的。

爲了讓事情變得更加清晰:

我需要一個圖案或其他方法在那裏我可以找到一個文本刺痛的所有URL。 URL的例子是:

  1. domain.com
  2. www.domain.com
  3. http://www.domain.com
  4. http://domain.com
  5. https://www.domain.com
  6. https://domain.com

的感謝! 5.

+0

您是否驗證來自帶有URL字段的表單的用戶輸入?或者,你是否在抓取頁面/文本塊來生成其中的URL列表?您正在嘗試解析的「文本字符串」的完整示例可能會有所幫助。 – baraboom 2011-05-25 16:54:59

+0

@baraboom:是的,來自用戶輸入的文本框。在這裏人們可能會輸入像這樣的twitter:twitter.com/user facebook:http://facebook.com等.. – Sisir 2011-05-25 17:26:25

回答

3
$pattern = '#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i'; 
preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER); 
+0

謝謝!幾乎工作!仍然需要找到模式'域。com' – Sisir 2011-05-25 17:37:37

+1

@Sisir用'?'替換'{1}'使http://或www可選。 – 2011-05-25 21:00:31

+0

這對我不起作用。我收到一個空的結果。 '$ pattern ='#(www \。| https?:\/\ /){?} [a-zA-Z0-9] {2,254} \。[a-zA-Z0-9] {2,4 }(\ S *)#I'; $ count = preg_match_all($ pattern,'http://www.Imaurl.com',$ matches,PREG_PATTERN_ORDER);' 從 '沒有錯誤'preg_last_error()' – Shane 2013-07-31 20:41:53

0

我不知道如果我明白你所需要的正確的,但你可以使用這樣的事情:

preg_match('#^.+?://#', $url); 

找到,如果有對字符串指定的協議,如果不只是追加http://