Erreur PHP : preg_match() Compilation failed, missing )

[Résolu/Fermé]
Signaler
Messages postés
155
Date d'inscription
jeudi 27 juin 2013
Statut
Membre
Dernière intervention
28 août 2014
-
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
-
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

Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
146
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 ?
Messages postés
155
Date d'inscription
jeudi 27 juin 2013
Statut
Membre
Dernière intervention
28 août 2014
9
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...
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
146
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 ?
Messages postés
155
Date d'inscription
jeudi 27 juin 2013
Statut
Membre
Dernière intervention
28 août 2014
9
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 !
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
146
Parfait ! Au plaisir ;)