2011-04-06 2 views
2

Vous rencontrez des problèmes regex ..PHP Regex preg_replace nom du premier dossier (générique)

J'ai une série de répertoires qui contiennent des modèles .htm ... tous les packs de modèles sont détenus dans le dossier TPL/(pas vraiment important) Tpl contient un pack de modèles par défaut appelé tpl_default. J'écris une fonction qui lit à partir du fichier de modèle actuel, puis obtient tous les Tokens {TOKEN} à partir du même fichier dans le répertoire par défaut. Vous avez des problèmes avec la regex "? WHAT" dans la ligne 1 en fait. Chaque fois que le premier répertoire peut être quelque chose de différent, alors comment faire correspondre SEULEMENT le premier répertoire avec un caractère générique?

Répondre

2

Vous avez besoin d'un point d'ancrage ^ afin que preg_replace() seul le premier remplace le répertoire. Et vous n'avez pas donné un exemple de chemin de fichier représentatif. (? Est-ce que cela commence par un chef de file / ou peut-être //) Dans les deux cas, cela devrait faire l'affaire:

solution
$file = preg_replace('%^(/*)[^/]+%','$1tpl_default',$file); 
+0

Excelent! Oui vous avez tout à fait raison, il faut trouver le premier dir seulement, FYI j'ai inclus un exemple du chemin du fichier dans le code .. // Le fichier $ renvoie abondant/index/index.htm à titre d'exemple. Donc besoin de changer cela pour lire tpl_default/index/index.htm Celui-ci fonctionne comme un charme si - merci beaucoup. – Nick

0

Essayez cette Regex, je pense que ce qu'il

'\/[\w\s_-]+\/' 
+0

Je l'ai édité s'il vous plaît essayez-le. – Headshota

0

est:

$pattern1 = "%^(/*)[^/]+%"; 
$default_file = preg_replace($pattern1,'tpl_default',$file); // loose the first 
$default_file = file_get_contents("../../tpl/".$default_file); 
$subject = $default_file; 
$pattern = '/\{.*?\}/';           
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3); 
return $matches; 

Merci va à ridgerunner pour la solution