Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 21h37   #1
marsboul2d
Invité de passage
 
Étudiant
Inscription : mai 2009
Messages : 14
Détails du profil
Informations personnelles :
Âge : 22

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2009
Messages : 14
Points : 4
Points : 4
Par défaut Regex récupération variable

Bonjour à tous !

Un problème qui peut paraître facile pour la plupart d'entre vous, mais je ne m'en sort pas !

J'ai ce genre de code au milieu de plein de texte :

a:1:{i:0;s:2:"15";}
ou encore
a:3:{i:0;s:3:"3.5";i:1;s:3:"4.9";i:2;s:3:"9.9";}

Je souhaite récupérer les variables entre guillemet (15 dans le premier cas et 3.5, 4.9 et 9.9 dans le deuxième)

J'ai pour cela utilisé ce code :

Code :
1
2
3
4
 
$contenttograbpricefrom = $news_desc;
$output2 = preg_match_all('([0-9]{1-9})', $contenttograbpricefrom, $Contentprice);
$Price = $Contentprice[1] [0]; // je sors le premier résultat de mon array
J'ai fait de nombreux essais,

Code :
preg_match_all('((^["][0-9]{1-9}([,.][0-9]{0,2}["][;]))'
par exemple, mais rien n'y fais, je n'arrive pas a récupérer ces valeurs.

Les valeurs peuvent être sous la forme de [0-9]{1-9}([,.][0-9]{0,2} c'est à dire 0.0 à 999999.99 par exemple.

Pouvez-vous m'indiquer ou je me trompe dans mon preg_match ?

Merci !
marsboul2d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 22h16   #2
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 467
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 467
Points : 21 273
Points : 21 273
Tout simplement
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/01/2013, 04h22   #3
marsboul2d
Invité de passage
 
Étudiant
Inscription : mai 2009
Messages : 14
Détails du profil
Informations personnelles :
Âge : 22

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2009
Messages : 14
Points : 4
Points : 4
Merci de ta réponse. Malheureusement ce code me sort également les variable type width="150" et tous les texte qu'il y a dans des guillemets également présente dans la variable $news_desc (il y a du texte et une image dans cette variable en plus du code que j'ai spécifié dans mon premier message...).

Du coup je suis obligé de faire $Price = $Contentprice[1] [7]; Pour obtenir un premier prix

Je suis donc preneur s'il y a plus propre afin d'avoir uniquement les prix comme mentionné dans mon premier message car je dois faire une boucle dans les cas ou il y a plusieurs prix dans la variable (cas N°2). J'ai essayé d'intégrer mon [0-9]{1-9}([,.][0-9]{0,2} à ton code mais sans succès ...
marsboul2d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 09h48   #4
selmouadin
Membre régulier
 
Homme Said ELMOUADIN
Développeur Web
Inscription : mai 2012
Messages : 57
Détails du profil
Informations personnelles :
Nom : Homme Said ELMOUADIN
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2012
Messages : 57
Points : 91
Points : 91
Salut,

J'ai modifié un peu la proposition de "Sabotage"

Code :
1
2
3
4
5
<?php
$str = 'a:3:{i:0;s:3:"3.5";i:1;s:3:"4.9";i:2;s:3:"9.9";}';
preg_match_all('#:"(.*)";#U', $str, $regs);
print_r($regs[1]);
?>
selmouadin est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/01/2013, 09h58   #5
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 075
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 075
Points : 64 522
Points : 64 522
Citation:
Je suis donc preneur s'il y a plus propre afin d'avoir uniquement les prix comme mentionné dans mon premier message
Probablement, mais comme tu n'indiques à aucun moment comment est réellement constituée ta chaine de départ, on ne peut pas t'aider plus !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h13   #6
marsboul2d
Invité de passage
 
Étudiant
Inscription : mai 2009
Messages : 14
Détails du profil
Informations personnelles :
Âge : 22

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2009
Messages : 14
Points : 4
Points : 4
Citation:
Envoyé par Bovino Voir le message
Probablement, mais comme tu n'indiques à aucun moment comment est réellement constituée ta chaine de départ, on ne peut pas t'aider plus !
Désolé. Il s'agit en faite d'un flux RSS (m'appartenant, je précise !) que je souhaite afficher d'un manière spécifique sur un autre de mes sites internet. J'ai bidouiller mon flux pour qu'apparaisse dans le content en plus de la description (du texte aléatoire donc), une image ainsi que mon prix qui apparaît dans une variable sous la forme a:1:{i:0;s:2:"15";}ou encore a:3{i:0;s:3:"3.5";i:1;s:3:"4.9";i:2;s:3:"9.9";}.

Code :
$news_desc = blablalblalalblal <img src="" alt="" width="" etc... + a:1:{i:0;s:2:"15";}
a:3{i:0;s:3:"3.5";i:1;s:3:"4.9";i:2;s:3:"9.9";} est utilisé pour un produit ayant plusieurs prix (un tee shirt taille M à 4.9 € et en XXL à 9.9 par exemple).

Citation:
Envoyé par selmouadin Voir le message
Salut,

J'ai modifié un peu la proposition de "Sabotage"

Code :
1
2
3
4
5
<?php
$str = 'a:3:{i:0;s:3:"3.5";i:1;s:3:"4.9";i:2;s:3:"9.9";}';
preg_match_all('#:"(.*)";#U', $str, $regs);
print_r($regs[1]);
?>
Merci de ta réponse !

Utiliser '#:"(.*)";#U' me sort un Parse error: syntax error, unexpected T_VARIABLE sur ma ligne 4 de :

Code :
1
2
3
4
$Price = "";
$contenttograbpricefrom = $news_desc;
$output2 = preg_match_all(''#:"(.*)";#U'', $contenttograbpricefrom, $Contentprice);
$Price = $Contentprice[1] [0];
Je sais que je fais pas mal de "bidouille", je ne suis pas expert en la matière, désolé si ce n'est pas claire...
marsboul2d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h29   #7
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 075
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 075
Points : 64 522
Points : 64 522
Si tu as la main sur le flux RSS, je pense que le plus simple serait surtout d'encadrer la portion souhaitée dans une balise pour pouvoir la récupérer plus facilement.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 17h00   #8
marsboul2d
Invité de passage
 
Étudiant
Inscription : mai 2009
Messages : 14
Détails du profil
Informations personnelles :
Âge : 22

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2009
Messages : 14
Points : 4
Points : 4
Citation:
Envoyé par Bovino Voir le message
Si tu as la main sur le flux RSS, je pense que le plus simple serait surtout d'encadrer la portion souhaitée dans une balise pour pouvoir la récupérer plus facilement.
Ça me semble compliqué dans le sens ou je ne maitrise pas plus que ça non plus les flux RSS (j'en ai chi*r pour en arriver jusque là !)

J'utilise Wordpress et j'ai dû insérer des fonctions dans le fichier function.php de mon thème pour parvenir au point ou j'en suis, c'est à dire un <content> de mon flux avec image et variable prix en plus du contenu :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// THIS INCLUDES THE THUMBNAIL IN OUR RSS FEED
function insertThumbnailRSS($content) {
global $post;
if ( has_post_thumbnail( $post->ID ) ){
$content = '' . get_the_post_thumbnail( $post->ID, 'thumbnail', array( 'alt' => get_the_title(), 'title' => get_the_title(), 'style' => 'float:right;' ) ) . '' . $content. ''. $price;
}
return $content;
}
add_filter('the_excerpt_rss', 'insertThumbnailRSS');
add_filter('the_content_feed', 'insertThumbnailRSS');
 
 
function fields_in_feed($content) {
    if(is_feed()) {
        $post_id = get_the_ID();
	$meta = get_post_custom($post_id);
	$price = $meta["mp_price"][0];
        $output = '
<div>
';
        $output .= '
<strong>Prix :</strong> ' . $price . '
';
 
        $output .= '</div>
';
        $content = $content.$output;
    }
    return $content;
}
add_filter('the_content','fields_in_feed');
Bref, j'ai la main, mais pas totalement
marsboul2d est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h04.


 
 
 
 
Partenaires

Hébergement Web