Manipulation des expressions réguliéres en php [Résolu]

Signaler
Messages postés
30
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
15 janvier 2010
-
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
-
Bonjour, Tous le monde
SVP, j'ai un probléme:
je suis entrain de developper une application web mon porbléme est lorssque j'ouvre un fichier avec fopen (un fichier .html//xhtml//htm) je veux extraire les proprietés existants entre la balise <style>.....</style> à l'aide des expressions réguliéres aprés je vais créer un fichier css et mettre ces proprieté dans ce dernier .
Je suis vraiment coincé.
Merci d'avance

8 réponses

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,


// ici il m'indique l'erreur: parse error

=> il manque une parenthèse fermante.

Par ailleurs :
$tableau n'est pas un tableau :
$tableau=array(); // c'est un tableau
$tableau= $str; // ce n'est plus un tableau mais une string, donc pb ds le foreach qui suit

Je me demande d'ailleurs pourquoi tu utilises un tableau (???) Pourquoi ne pas lire l'intégralité du fichier plutôt que faire un traitement ligne par ligne (cf file_get_contents())?
Tu peux également utiliser la fonction file() si ce tableau est nécessaire.

$out=array();

Il est inutile de définir $out, preg_match_all s'en charge.

Tu as oublié un ] dans ton expression régulière.


Cordialement,


Kohntark -
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
La façon la plus simple c'est d'utiliser la méthode preg_match_all. Pour l'expression régulière c'est tout bête comme principe.

/\<style(?:[^\>]*)\>(.*?)\<\/style\>/
Messages postés
30
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
15 janvier 2010

Merci pour ton aide => c'était efficase
Mais bon j'ai demander de l'iade puisque les fonction réguliére m'enbéte beaucoup
et pourqoui c bête comme principe????????
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
L'expression que j'ai mis est un peut étoffée pour satisfaire quelques généralités, mais en gros le principe pour récupérer du contenu entre des balise est de tout simplement faire quelque chose comme ceci :

/(.*?)/ et d'«escaper» les caractères nécessaires (<>,.\/{}[])
Messages postés
30
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
15 janvier 2010

regarde ARTO,
voila le code source commenté il m'affiche une erreur :

<?php
// Affectation
$fichier=$_REQUEST['fichier']; // c'est le nom de il est transmis de la page copy.php vers traiter.php

//Ouvre en lecture et écriture, place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.

$filename = "fichier_telecharger/".$fichier;
$handle = fopen ($filename, "r+");
$str = fread ($handle, filesize ($filename));
fclose ($handle);

$tableau=array();
$tableau= $str; //tableau qui contient le contenu du fichier

echo $tableau;
//jusqu'a maintenant tout marche bien
$expression= "/\<style(?:[^\>*)\>(.*?)\<\/style\>/"; // l'expression réguliére qui permet de génerer le contenu qui existe entre <style></style>

foreach($tableau as $file)
{
$out=array(); // c'est le tableau de sortie

if (preg_match_all($expression, $file, $out, PREG_SET_ORDER)// ici il m'indique l'erreur: parse error
{
echo "Le contenu de la balise style est copier dans :
";
print_r($out);
}
else
{
echo "Pas de balise style dans ce fichier
";
echo "Veuillez vérifier votre fichier introduit";
}
}

?>

si t'a une idée merci de m'aider.
Karim
Messages postés
30
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
15 janvier 2010

Merci
deja la parenthese c une faute de copier coler
je vais essayer de voir le resultat
=>à propos du ]
j'ai pas ouvert un [ mais c'est vrai un message d'erreue m'apparait et m'indique Compilation failed: missing terminating ]
ou je doit le mettre PREG_SET_ORDER c'est une option facultatif
1000 Merci
Cordialement

Karim
Messages postés
30
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
15 janvier 2010

Kohntark
sava j'ai compris pour le moments pas de message d'erreur tout va bien
mais la fonctionnalité ne marche pas c à dire j'ai introduit un fichier html ou la balise <style></style> existe
mais rien ne s'est produit voici le code:


<?php
// Affectation
$fichier=$_REQUEST['fichier']; // c'est le nom de il est transmis de la page copy.php vers traiter.php

//Ouvre en lecture et écriture, place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.

$filename = "fichier_telecharger/".$fichier;
$handle = fopen ($filename, "r+");
$str = fread ($handle, filesize ($filename));
fclose ($handle);


//echo $str;

$expression= "/\<style(?:[^\>]*)\>(.*?)\<\/style\>/"; // l'expression réguliére qui permet de génerer le contenu qui existe entre <style></style>



$out=array(); // c'est le tableau de sortie
$output='';
if (preg_match_all($expression, $str, $out, PREG_SET_ORDER))
{
echo "Le contenu de la balise style est copier dans :
";

for ($i=0;$i<sizeof($out);$i++)
{
$output.=$out["$i"];
}
$fichier_css= fopen("fichier_telecharger/output/fichier.css","w+");
fwrite ($fichier_css, $output);
fclose ($fichier_css);
}
else // ==>la compilation affiche le else
{
print ("<center>Pas de balise style dans ce fichier</center>");
print ("<center>Veuillez verifier votre fichier introduit</center>");


}


?>
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
Faudrait que tu regardes un peu plus ce que preg_match_all te retourne comme tableau. C'est un tableau à 2 dimensions qu'il te retoune et tu le traites comme un tableau à 1 dimension.

<?php
for ($i=0;$i<count($out);$i++)
{
    $output .= $out[$i][1];
}?>


La documentation : preg_match_all