2012-05-30 5 views
0

Je suis desperatley essayant d'obtenir l'URL de John Grubers en reconnaissant regexs pour fonctionner correctement! La fonction simple que j'ai écrite renvoie toujours faux, même avec une URL flagrante dedans! J'essaie de tester les urls spécifiques à l'url et au web dans 2 fonctions différentes. Je suis assez nouveau pour Regexs, donc c'est presque certainement moi!Je ne peux pas obtenir cette regex pour fonctionner correctement

fonction

:

<?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); 
?> 

Merci à l'avance pour toute aide!

+0

http://stackoverflow.com/questions/2490310/regular-expression-for-checking-website-url - Cela devrait être ce que vous recherchez. – David

+0

Une [question identique] (http://stackoverflow.com/questions/2025095/url-matching-using-grubers-regex-in-php) – elias

+0

Les expressions originales, j'essaie de travailler, sont à: [lien] ] (http: // http: //daringfireball.net/2010/07/improved_regex_for_matching_urls) – user1427029

Répondre

1

Ci-dessous votre regex.
Je pense que preg_match a besoin d'un délimiteur regex "/ regex /" ou "~ regex ~". Mais, si vous utilisez le délimiteur comme caractère dans le corps de la regex, il doit être échappé.

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

Depuis votre utilisation de / comme un personnage, essayez d'utiliser un autre délimiteur.
élargi -

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

Merci beaucoup, je n'arrive toujours pas à comprendre Regex, mais merci de m'avoir aidé :) – user1427029

Questions connexes