PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 31-08-2009 13:33:53

pablofr
Membre
Inscription : 31-08-2009
Messages : 16

preg_split ou preg_match_all

Bonjour à tous
Je suis entrain d'essayer d'utiliser les expressions régulières mais je bloque


// $en['SUBJECT'] = "<b>Sujet</b>";
$str = "\$en['SUBJECT'] = \"<b>Sujet</b>\";"; // Voici ma variable mi sous cette forme pour mon test.

Je veux extrait de cette forme là

// $en['$1'] = "$2";

J'ai essayé ca mais sans succès
$var =  preg_split('/\$en[\'([A-Z])+\'] = /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);

print_r($var);
echo  $var;

et ça pareil

preg_match_all("|\$en[^(.*)[^\'\]]+ = |",$str , $out, PREG_OFFSET_CAPTURE);
echo $out[0][0] . ", " . $out[0][1] . "\n";

Avez vous une idée ?
Merci

Hors ligne

#2 31-08-2009 14:01:29

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : preg_split ou preg_match_all

Salut,


if (preg_match('`\$en\[\'([A-Z]+)\'\] = "(.*)";`',$str,$out)){
  print_r($out);
}else{
  echo 'nomatch';
}
 

Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#3 31-08-2009 14:07:23

pablofr
Membre
Inscription : 31-08-2009
Messages : 16

Re : preg_split ou preg_match_all

Wajou super !
J'étais entrain de partie sur plusieurs explode en même temps
ca marche à 100%

Hors ligne

#4 31-08-2009 14:09:43

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : preg_split ou preg_match_all

Attention cependant,

Si : $en['SUBJECT'] = "<b>Sujet</b>"; matche, les lignes suivantes ne seront pas prises :
$en['SUBJECT']="<b>Sujet</b>";
$en['SUBJECT'] = '<b>Sujet</b>';
$en["SUBJECT"] = "<b>Sujet</b>";

A+


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#5 31-08-2009 14:28:10

pablofr
Membre
Inscription : 31-08-2009
Messages : 16

Re : preg_split ou preg_match_all

Je me suis imposé de faire un fichier propre donc il n'y aura pas d''espace.

Un grand merci

Hors ligne

#6 15-10-2009 14:13:12

asus75
Membre
Inscription : 15-10-2009
Messages : 4

Re : preg_split ou preg_match_all

Bonjour,
J’ai presque la même problématique que pablofr,

J’ai une chaîne avec le format suivant :

$data = “[ID:sd54f6sd5][REF:sdfsdlmkfsd][TOTO:sdfsfjklsd]”;

J’essaie depuis plusieurs jour de crée une fonction générique me permettant d’extraire ces les données:

function extra_data($debut, $data){
if (preg_match("[".$debut.":(.*)]", $data, result)){
       return $result[1];
        }

}

$id = extra_data ("ID", $data) ;
echo $id;

Cela ne fonctionne pas à 100%

Avez vous une idée ?

Merci

Dernière modification par asus75 (15-10-2009 14:23:35)

Hors ligne

#7 15-10-2009 16:49:08

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : preg_split ou preg_match_all

Hello,

Essaye de rajouter des '\' à coté de tes crochets :


preg_match("\[".$debut.":(.*)\]", $data, $result)
 

Comme les crochets sont des métas caractères preg_patch va identifier une classe de caractères plutôt que ta chaîne '$debut'


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#8 15-10-2009 17:13:30

asus75
Membre
Inscription : 15-10-2009
Messages : 4

Re : preg_split ou preg_match_all

si je mets

      preg_match("\[".$debut.":(.*)\]", $data, $result)

cela me met "Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash"

si je met

 preg_match("[".$debut.":(.*)]",$data,$result);

cela m'affiche

sd54f6sd5][REF:sdfsdlmkfsd][TOTO:sdfsfjklsd]

Donc cela enlève le début mais pas la fin, ce que je ne comprend pas sad

Hors ligne

#9 15-10-2009 17:17:30

asus75
Membre
Inscription : 15-10-2009
Messages : 4

Re : preg_split ou preg_match_all

En fait je peux rajouter une $toto = explode("]", $result[1]) a la fin et appeler $toto[0]

Hors ligne

#10 16-10-2009 08:31:28

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : preg_split ou preg_match_all

Salut,

Il te faut d'une part délimiter correctement le masque et ensuite le rendre non gourmand (option U).


preg_match("`\[".$debut.":(.*)\]`U",$data,$result);
 

Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

Pied de page des forums