2012-05-30 43 views
0

我desperatley試圖讓約翰格魯貝爾URL識別正則表達式正常工作!我寫的簡單函數總是返回false,即使是在其中的一個明顯的URL!我不能得到這個正則表達式正常工作

我想在2個不同的函數中測試任何url和web特定的url。我對Regexs相當陌生,所以這幾乎肯定是我的!

功能:

<?php 
function isweburl($url) 
{ 
return(preg_match("(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:  [^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`! ()\[\]{};:'\".,<>?«»「」‘’]))", $url)); 

} 

function isanyurl($url) 
{ 
echo "suspected url:$url<br>"; 
return(preg_match("/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?: [^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`! ()\[\]{};:'\".,<>?«»「」‘’]))/", $url)); 

} 

$test=isanyurl('http://www.sega.com'); 
var_dump($test); 
echo "<br>web test:<br>"; 
$test=isweburl('http://www.sega.com'); 
var_dump($test); 
?> 

在此先感謝您的幫助!

+0

http://stackoverflow.com/questions/2490310/regular-expression-for-checking-website-url - 這應該是你在找什麼。 – David

+0

[相同的問題](http://stackoverflow.com/questions/2025095/url-matching-using-grubers-regex-in-php) – elias

+0

原始表達式,我想要工作,在:[鏈接](http://daringfireball.net/2010/07/improved_regex_for_matching_urls) – user1427029

回答

1

下面是你的正則表達式。
我認爲preg_match需要一個正則表達式分隔符「/ regex /」或「〜regex〜」。
但是,如果在正則表達式正文中使用delimeter作爲字符,則必須將其轉義。

"  
(?i)\b 
(
     (?: 
      https?:// 
     | www\d{0,3}[.] 
     | [a-z0-9.\-]+[.][a-z]{2,4}/ 
    ) 
     (?: 
      [^\s()<>]+ 
     | \(
      (
       [^\s()<>]+ 
      | 
       (
        \([^\s()<>]+\) 
       ) 
      )* 
      \) 
    )+ 
     (?: 
      \(
      (
       [^\s()<>]+ 
      | 
       (
        \([^\s()<>]+\) 
       ) 
      )* 
      \) 
     | [^\s`! ()\[\]{};:'\".,<>?«»「」‘’] 
    ) 
) 
" 

由於您使用/爲一個字符,請嘗試使用不同的分隔符。
展開 -

"~ 
(?i)\b 
(
     (?: 
      https?:// 
     | www\d{0,3}[.] 
     | [a-z0-9.\-]+[.][a-z]{2,4}/ 
    ) 
     (?: 
      [^\s()<>]+ 
     | \(
      (
       [^\s()<>]+ 
      | 
       (
        \([^\s()<>]+\) 
       ) 
      )* 
      \) 
    )+ 
     (?: 
      \(
      (
       [^\s()<>]+ 
      | 
       (
        \([^\s()<>]+\) 
       ) 
      )* 
      \) 
     | [^\s`! ()\[\]{};:'\".,<>?«»「」‘’] 
    ) 
) 
~x" 
+0

非常感謝,我仍然無法理解Regexs,但感謝您幫助我:) – user1427029