Besoin d'aire sur une preg_match

Petit nouveau ! | 2 Messages

28 janv. 2012, 13:39

Bonjour a tous
je suis en train de migrer un site pour une asso (bénévolat).
je ne m'en sort pas avec une instruction, si une ame charitable peut m'aider, je lui en serais infiniment reconnaissant.

Source php 3:
 // Execute query if end of query detected (; as last character) AND NOT in parents
if (ereg(";$", trim($dumpline)) && !$inparents) {
 if (!TESTMODE) {
 $db->setQuery(trim($query));
// echo $query . '
';
 if (!$db->Query()) {
 echo ("<p class=\"error\">".JText::_('Error at the line') ." $linenumber: ". trim($dumpline) . "</p>\n");
 echo ("<p>".JText::_('Query:') . trim(nl2br(htmlentities($query))) ."</p>\n");
 echo ("<p>MySQL: " . mysql_error() . "</p>\n");
 $error = true;
 break;
 }
ma modif en php5
// Execute query if end of query detected (; as last character) AND NOT in parents
if (preg_match(";$", trim($dumpline)) && !$inparents) {
 if (!TESTMODE) {
 $db->setQuery(trim($query));
// echo $query . '
';
 if (!$db->Query()) {
 echo ("<p class=\"error\">".JText::_('Error at the line') ." $linenumber: ". trim($dumpline) . "</p>\n");
 echo ("<p>".JText::_('Query:') . trim(nl2br(htmlentities($query))) ."</p>\n");
 echo ("<p>MySQL: " . mysql_error() . "</p>\n");
 $error = true;
 break;
 }

et j'obtiens cette erreur

Warning: preg_match() [function.preg-match]: No ending delimiter ';' found in

j'ai juste remplacé ereg par preg-match (trouvé sur le net).

Je vous remercie par avance de votre aide
Cordialement
Gérard
Modifié en dernier par zeus le 14 févr. 2012, 10:16, modifié 1 fois.
Raison : Ajout de balises de mise en forme du code

Eléphant du PHP | 250 Messages

28 janv. 2012, 14:00

Bonjour
Réponse sans garantie, mais sans doute une piste....
Il me semble que la réponse t'es donnée dans le warning; je te conseille la lecture du manuel et des pattern; là, l'alarme te dit que tu n'as pas mis de délimiteurs
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Mouflon2
Invité n'ayant pas de compte PHPfrance

28 janv. 2012, 14:48

Merci de votre réponse rapide.
N'étant pas complètement abruti, j'ai bien vu qu'il manquait un ;.
J'ai aussi consulté la doc que vous cité puisqu'elle correspond à la nouvelle instrruction destinée à remplacer celle devenue obsolète. Deprecated pour parler comme les phpistes.
Mon problème, c'est que je ne sais pas ou le claquer ce ;
Comme de plus l'instruction est destinée à rechercher un ; je me demande si le problème ne vient pas de là.
Bref je ne suis toujours pas plus avancé.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 janv. 2012, 14:58

N'étant pas complètement abruti, j'ai bien vu qu'il manquait un ;.
on s'emballe pas hein :)

le problème vient du fait de ta méconnaissance des expression régulière. je te conseil le site expreg.com pour en savoir plus.

en gros ereg* utilisait des expressions régulière basé sur POSIx, les preg_match* sur PRCE.
La grosse différence c'est que PRCE demande un délimiteur sur l'expression régulière. Et il prend le 1er caractère rencontré comme le délimiteur de la chaine, hors ici c'est le ; :mrgreen:

en général on utilise en délimiteur / ou # ou ` (tant qu'il ne se trouve pas dans le motif).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 250 Messages

28 janv. 2012, 15:02

Bonjour
là, l'alarme te dit que tu n'as pas mis de délimiteurs
Je ne suis pas un spécialiste (et pour tout dire j'ai encore quelques difficultés avec les expressions régulières :mrgreen: ) mais la documention sur les délimiteurs devrait t'aider; et en particulier ceci:
Délimiteurs

Lors de l'utilisation des fonctions PCRE, il est nécessaire que le motif soit encadré par des délimiteurs. Un délimiteur peut être n'importe quel caractère alpha-numérique autre qu'un backslash ou qu'un espace.

Les délimiteurs les plus courants sont les slashes (/), dièses (#) et les tildes (~). Les exemples suivants ont tous des motifs encadrés avec des délimiteurs valides.
Bref, quelque chose comme
"#;$#"
peut être.....
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Eléphant du PHP | 250 Messages

28 janv. 2012, 15:03

Damned! Grillé! :mrgreen:
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 janv. 2012, 15:38

:mrgreen: :mrgreen:
Il en faut peu pour être heureux ......

Petit nouveau ! | 2 Messages

28 janv. 2012, 16:45

Merci beaucoup à vous 2.

@Boro64 désolé de ma réponse un peu brutale mais je 'bidouille' en php et je suis en train de modifier le script d'import de joomla qui ne fonctionnait pas sous ma config (version PhP trop récente) et je patauge grave.

@Boro64 et Moogli C'est bien les délimiteurs qui manquaient "#;$#".

@modo, si quelqu'un peux fermer le post, je n'ai pas trouvé comment.

@modo, deleter le post dans la section Projets collaboratifs / entraide

Bon week-end à vous et encore merci