Erreur PHP : preg_match() Compilation failed, missing )

Résolu
blaz32 Messages postés 179 Statut Membre -  
chico200987 Messages postés 856 Statut Membre -
Bonjour, j'ai une erreur de la part de PHP :

Warning: preg_match() [function.preg-match]: Compilation failed: missing ) at offset 46 in C:\Users\Perso\Documents\wamp\www\site\core\Router.php on line 27

Je ne vois pas ce que signifie cette erreur, j'ai recherché sur php.net, mais je ne trouve pas :(

que peut signifier cette erreur ?

Si je savais à quoi correspond cette erreur, ça pourrait m'aider à chercher le problème dans mon code...

Merci de vos réponses

3 réponses

  1. chico200987 Messages postés 856 Statut Membre 144
     
    Salut,

    Pourtant cette erreur est assez explicite, elle indique "missing ) at offset 46 [...] at line 27"

    Ligne 27 colonne 46 il semblerait qu'il manque une parenthèse fermante. Mais cela peut-être du à autre chose, quelles sont les lignes 44 jusque 48 ?
    0
  2. blaz32 Messages postés 179 Statut Membre 10
     
    44 à 48, ça fait
    return true;
    }
    /**
    

    donc, voici le code des lignes 20 à 47 :
    static function parse($url,$request){
       $url = trim($url,'/');
       if(empty($url)){
        $url = Router::$routes[0]['url'];
       }else{
        $match = false;
        foreach(Router::$routes as $v){
         if(!$match && preg_match($v['redirreg'], $url, $match)){
          $url = $v['origin'];
          foreach($match as $k => $v){
           $url = str_replace(':'.$k.':',$v,$url);
          }
          $match = true;
         }
        }
       }
    
       $params = explode('/',$url);
       if(in_array($params[0],array_keys(self::$prefixes))){
        $request->prefix = self::$prefixes[$params[0]];
        array_shift($params);
       }
       $request->controller = $params[0];
       $request->action = isset($params[1]) ? $params[1] : 'index';
       $request->params = array_slice($params,2);
       return true;
      }
    


    Merci de votre aide, mais je ne vois pas où il manque une parenthèse...
    0
    1. chico200987 Messages postés 856 Statut Membre 144
       
      Dans ce cas, il faudrait vérifier ce que tu as dans $v['redirreg'], ton expression régulière semble erronée.

      Pourrais-tu print ce qu'il y a dedans et vérifier que c'est bien ce que tu attends ?
      0
  3. blaz32 Messages postés 179 Statut Membre 10
     
    Merci beaucoup !

    J'avais mon $v['redirreg'] qui correspondait à mon $r['redirreg']...
    c'était ça :
    $r['redirreg'] = $redir;
       $r['redirreg'] = str_replace('/*', '(?P<args>/?.*)', $r['redirreg']);
       foreach($r['params'] as $k => $v){
        $r['redirreg'] = str_replace(":$k", "(?P<$k>$v", $r['redirreg']);
       }
       $r['redirreg'] = '/^'.str_replace('/', '\/',$r['redirreg']).'$/';
    
       $r['redir'] = preg_replace('/:([a-z0-9]+)/',':${1}:',$redir);
       $r['redir'] = str_replace('/*',':args:',$r['redir']);
    
       self::$routes[] = $r;
    


    l'erreur venait du
    $r['redirreg'] = str_replace(":$k", "(?P<$k>$v", $r['redirreg']);
    car il fallait remplacer le ":$k" par ":$k:"...

    Maintenant que l'expression régulière est correcte, je peux continuer là où j'en étais ^^

    Merci beaucoup !
    0
    1. chico200987 Messages postés 856 Statut Membre 144
       
      Parfait ! Au plaisir ;)
      0