2012-05-30 135 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

相关问题