Erreur PHP : preg_match() Compilation failed, missing )

Résolu
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. 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 ?
    1. 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...
      1. 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 ?
    2. 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 !
      1. Parfait ! Au plaisir ;)