preg_replace et expression rationnelle perl, le retour [php / perl] - PHP - Programmation
Marsh Posté le 25-04-2006 à 15:52:30
Autoréponse à l'ancien post :
Bon j'ai fini par la traduire comme ça :
preg_replace("%\s*?\\\".*$%","%%",$line); |
Marsh Posté le 01-05-2006 à 17:15:37
Je viens de voir qu'on peut faire des appels de fonctions dans les patterns de remplacement, comme ici par exemple, tiré de la doc officielle (dans les commentaires) :
Code :
|
Alors je me gourre d'erreur ou on ne peut vraiment pas faire ce que je cherche à faire ?
Dans ce cas je peux faire une fonction genre
Code :
|
Vous en pensez quoi ?
PS: désolé si je floode un peu mais j'ai pris du retard la faut que j'avance, et un petit coup de pouce pour me remettre sur les rails serait vraiment le bienvenu
Marsh Posté le 01-05-2006 à 20:13:29
preg_replace("%\\\*\((.+?)%es",'\$vars[\\1]',$line);
?
Marsh Posté le 01-05-2006 à 21:03:11
Merci de ta réponse, ca a l'air de passer.
En fait j'avais des erreurs quand j'essayais de l'écrire
Code :
|
mais plus maintenant.
Une autre erreur a du m'embrouiller
Marsh Posté le 01-05-2006 à 23:56:41
heu pour le deuxième "" faut pas mettre de % % (et utilise '')
Marsh Posté le 02-05-2006 à 14:19:38
Merci.
Mais pourquoi utiliser des simples quotes ? normalement il faut des doubles quotes pour que les contenus soit interprété
Sinon j'ai un problème à l'exécution sur cette regexp :
Code :
|
Je ne comprend pas pourquoi, normalement ca devrait matcher la chaine "\(xx" avec xx deux carractères quelconques, et il me crache une erreur de compilation
Si t'as une idée ca serait cool, sinon je continue à chercher
Marsh Posté le 02-05-2006 à 15:22:15
> Mais pourquoi utiliser des simples quotes ?
Parce que le pattern n'est pas interprété, au sens qu'on ne recherche pas de variables dedans
Marsh Posté le 02-05-2006 à 15:42:59
madkat a écrit : Merci.
|
Parce qu'il faut mettre :
preg_replace("%\\\*\((..)%e","\$special[\"$1\"]" || "\\($1\" )",$line);
ou alors
preg_replace("%\((..)%e","\$special[\"$1\"]" || "\\($1\" )",$line);
si tu t'en fous de l'etoile
Marsh Posté le 02-05-2006 à 18:10:19
joce a écrit : Parce qu'il faut mettre : |
Désolé mais je comprends pas bien
Avec la première, je vais matcher une chaine type "\*(xx" et "(xx" avec la deuxième non ?
Je vais tester mais mon script n'étant pas encore complètement traduit, je ne peux pas trop vérifier que ca a le comportement attendu
PS: quand je dis une chaîne type "\*(xx" ca veut dire qu'on retrouve littéralement cette chaîne dans le fichier (à part les xx).
Marsh Posté le 02-05-2006 à 18:56:10
ba si tu veux matcher (xx, faut mettre \((..)
si tu mets \\\((..), ca veut dire que tu veux matcher \ avec un erreur de syntaxe derriere (pour matcher \, il faut ecrire \\\)
Marsh Posté le 02-05-2006 à 20:26:31
Ah ok, donc l'erreur viens du fait qu'il manque un \, je pensais que pour matcher \ on écrivait \\.
Je vais avoir certaines regexp à corriger moi
Edit : Ca ne marche pas non plus
Je cherche sans succès à traduire ca :
Code :
|
Marsh Posté le 10-05-2006 à 14:08:40
Salut tout le monde, je remonte ce topic parceque j'ai une petite question, je voudrais savoir si c'est possible en php d'utiliser des "sous tableaux" : J'ai un tableau T[], je voudrais utiliser le sous tableau T[x..y] avec y l'indice du dernier élément du tableau,
C'est faisable ?
Marsh Posté le 10-05-2006 à 14:11:19
http://fr2.php.net/manual/fr/function.array-slice.php ?
Marsh Posté le 19-05-2006 à 15:53:17
J'ai une question sur les variables globales et l'option register global de php :
Le script perl que je traduit s'appuie énormément sur les variables globales, donc je voudrais savoir si au sain d'un même fichier php il est possible d'utiliser des variables globales même si register global est à off.
Ca me permettrais d'éviter de mettre des tonnes de paramètres à toutes mes fonctions, et aussi de garder une certaine lisibilité dans le code.
J'ai essayé de mettre des 'global' devant mes déclarations de variables, mais ca n'a pas eu l'air très concluent, je ne sais pas si c'est du au register global ou a une autre erreur dans mon script.
Merci
Marsh Posté le 19-05-2006 à 16:06:53
Pour info sur les variables globales :
http://fr3.php.net/manual/fr/security.globals.php
Mettre global devant une variable va malgré tout bien la rendre globale. Mais en fait ton problème vient du fait qu'en utilisant le register global, tu peux récupérer des variables sans te soucier d'où elles proviennent.
Par exemple, avec le register global sur off, pour récupérer une valeur envoyé en GET, tu dois utiliser $_GET['mavariable']
Avec un register global sur on, tu peux récupérer cette valeur simplement par $mavariable.
Donc dans ton script, tu dois remplacer les variables par leur équivalent avec super tableau ($_GET, $_POST, $_COOKIE, $_SESSION)
edit : sinon j'ai ptet mal compris ton problème. Pour répondre à ta question, oui on peut utiliser des variables globales même si le register_global est à off. La variable aura donc une portée extérieure à une fonction par exemple.
Marsh Posté le 23-05-2006 à 16:38:53
Djebel1 a écrit : Pour info sur les variables globales : |
Merci pour cette réponse, c'est le comportement de php que j'espérais, mais visiblement après tests, ca ne marche pas
Tant pis, mes fonctions auront 15 paramètres chacunes.
edit: ah bah non c'est moi qui savait pas m'en servir.
'tain l'overbookage cay le mal, ca fait faire n'importe quoi
Marsh Posté le 23-05-2006 à 17:48:52
ta fonction est récursive ? Parce qu'à part ça, je pense pas que le recours à des variables globales soient utiles. Si c'est juste pour ne pas avoir trop de paramètres à ta fonction, je te déconseille l'usage de variables globales : faut les trouver dans le code, s'assurer que rien d'autre ne les modifie, quand qqn d'autre reprend ton code c'est peu sur.
Marsh Posté le 23-05-2006 à 22:52:51
En fait je traduit un script perl en php, et c'est plein de sous fonctions.
En perl, les variables sont globales par défaut, et le développeur du script a bien utilisé ce comportement. Je ne pense pas que ce soit plus lisible de mettre les variables en argument plutôt que de mettre une liste de global $var1,...,$varn au début de la ligne, mais par contre, c'est vrai que moi je galère à savoir qu'est ce qui est variable globale ou pas.
je vais bosser une bonne partie de la nuit je crois
Marsh Posté le 25-04-2006 à 14:39:39
Bonjour tout le monde,
Dans le cadre d'un projet je dois convertir une partie d'un script perl en php.
Le script perl en question prend un fichier troff en entrée (pages de man unix) et le converti en html.
Dans mon script en perl j'ai pas mal de regexp ou les patterns sont constitués en partie de variable, comme
s,\\\*\((..),$vars{$1},ge;
C'est possible de faire sensiblement la même chose en php ?
Ou il faut que je fasse une grosse bidouille genre
Merci de votre aide.
Ancien post :
J'ai pas mal avancé dans ma traduction mais je butte sur une certaine regexp :
s,\s*\\".*$,,
que je pensais traduire par
preg_replace("#\s*\\".*$#",,$line);
mais ca ne marche pas, j'ai un message d'erreur sur la deuxième étoile.
Quelqu'un pourrait il m'aider ?
J'ai une deuxième question : dans la doc officielle de php sur les patterns pour les regexp, on trouve des patterns encadrés par des /, des #, des % ou des @ (/pattern/,#pattern#, ....).
Je n'ai pas réussi à trouver la doc sur leur signification, quelqu'un pourrait il m'éclairer ?
Merci d'avance
Message édité par madkat le 01-05-2006 à 17:56:38