Erreur PHP sur un preg_match() HELP

Résolu/Fermé
blaz32 Messages postés 155 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 28 août 2014 - Modifié par blaz32 le 7/01/2014 à 18:48
blaz32 Messages postés 155 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 28 août 2014 - 7 janv. 2014 à 21:29
Salut, j'ai une erreur de la part de PHP :

Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in C:\... line 91

Voici le bout de code concerné :

Router, système d'url :

static function url($url = ''){
trim($url,'/');
foreach(self::$routes as $v){
if(preg_match($v['originreg'],$url,$match)){
$url = $v['redir'];
foreach($match as $k => $w){
$url = str_replace(":$k",$w,$url);
}
}
}
foreach(self::$prefixes as $k => $v){
if(strpos($url,$v) === 0){
$url = str_replace($v,$k,$url);
}
}
return BASE_URL.'/'.$url;
}

J'aurais vraiment besoin d'aide ^^
Merci d'avance :D
A voir également:

3 réponses

mandolorien Messages postés 109 Date d'inscription dimanche 9 septembre 2012 Statut Membre Dernière intervention 9 mars 2018 3
Modifié par mandolorien le 7/01/2014 à 19:02
voila :

<?php
static function url($url = '')
{
	trim($url,'/');
	foreach(self::$routes as $v)
	{
		$pattern = "/".$v['originreg']."/";
		if(preg_match($pattern,$url,$match))
		{
			$url = $v['redir'];
			foreach($match as $k => $w)
			{
				$url = str_replace(":$k",$w,$url);
			}
		}
	}

	foreach(self::$prefixes as $k => $v)
	{
		if(strpos($url,$v) === 0)
		{
			$url = str_replace($v,$k,$url);
		}
	}
	
	return BASE_URL.'/'.$url;
}


pense à te servir de php.net

https://www.php.net/preg_match
Admire la personne qui te critique , car prisonniere de ca propre jalousie elle ne fais que t admirer
0
blaz32 Messages postés 155 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 28 août 2014 10
Modifié par blaz32 le 7/01/2014 à 21:10
Merci, mais il détecte une erreur :
Warning: preg_match() [function.preg-match]: Unknown modifier '^' C:\.. in line 95

Je ne vois pas pourquoi l'erreur se trouve à :
if(preg_match($v['originreg'],$url,$match)){
ou à
$pattern = "/".$v['originreg']."/";
if(preg_match($pattern,$url,$match))
0
blaz32 Messages postés 155 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 28 août 2014 10
7 janv. 2014 à 21:29
J'ai résolus mon problème en repartant de plus haut :

J'ai remplacer :
$r['originreg'] = preg_replace('/([a-z0-9]+):([^\/]+)/','${1}:(?P<${1}>${2}',$url);
$r['originreg'] = str_replace('/*','(?P<args>/?.*)',$r['originreg']);
$r['originreg'] = '/^'.str_replace('/','\/',$r['originreg'].'$/');


par :
$r['originreg'] = preg_replace('/([a-z0-9]+):([^\/]+)/','${1}:(?P<${1}>${2})',$url);
$r['originreg'] = str_replace('/*','(?P<args>/?.*)',$r['originreg']);
$r['originreg'] = '/^'.str_replace('/','\/',$r['originreg']).'$/';


C'est pour ça ^^ j'avais oublié quelques caractères dans mon expression régulière ^^

Merci quand même.
PS:votre code fonctionne aussi
0