Expressions régulières, recherche ds un .txt - PHP - Programmation
Marsh Posté le 30-10-2005 à 16:57:12
preg_match a un troisième argument qui permet de récupérer une partie de ta chaîne spécifiée dans le masque.
Voir http://fr.php.net/preg_match
Marsh Posté le 30-10-2005 à 17:03:51
'vais tenter, merci déja
Marsh Posté le 30-10-2005 à 18:59:29
Bon j'arrive tjours au même résultat: pas celui que je veux
J'ai ceci comme sortie HTML, qui me semble être un bon début:
Code :
|
J'aimerais récupérer "La barre de fer" dans une variable Libelle, par ex, et ainsi de suite pour les autres ... help
Marsh Posté le 30-10-2005 à 22:03:05
T'as des connaissances en regexp ou pas du tout ? Parce que c'est pas bien compliqué là.
Marsh Posté le 30-10-2005 à 22:15:56
Je débute, je connais les règles de base, mais ça s'arrete la.
Avec...
Code :
|
... je récupere les infos unes à unes, mais il me faudrait une possibilité de tout filtrer d'un coup, avec une longue expression. Je ne sais pas trop comment procéder sinon
Marsh Posté le 30-10-2005 à 22:24:31
Ben je t'ai filé la doc de preg_match, c'est fait pour ça. En fait, preg_match_all serait encore plus adaptée ici, car elle te permet de ne pas avoir à splitter ta chaîne par ligne (voir l'option "m" ici : http://fr.php.net/manual/fr/refere [...] iers.php).
Sinon ton masque tel que tu l'as écrit prend ce qu'il y a avant le : et entre le : et le =, pas ce qu'il y a après.
Marsh Posté le 30-10-2005 à 22:32:49
J'ai bien essayé le preg_match, mais à chaque fois il me disait que mon filtre ne devait pas être alphanumérique ni Slash ... je n'ai pas bien compris
Je continuerai demain, merci de ton aide en tout cas
Marsh Posté le 30-10-2005 à 22:36:28
Faut entourer ton masque avec des caractères genre # (ou presque n'importe quel caractère qui pourra être ignoré dans le reste du masque).
Ex. : preg_match('#^[0-9]*abc$#', $chaine);
Marsh Posté le 31-10-2005 à 17:19:24
Hmm je teste, je teste ... mais je n'arrive pas à extraire ce que je veux
Code :
|
Je donne
Code :
|
... ce qui est correct pour array[0], mais dans array[1] je devrais avoir ma chaine filtrée
Je pensais récupérer tout ce qui se trouve après un " = ", mais je n'y parviens pas
Désolé
Marsh Posté le 31-10-2005 à 17:50:52
Bon, comme je bloque, je vais tenter de le faire ligne par ligne, comme au début:
Code :
|
qui me donne
Code :
|
et maintenant, je fais une regex pour chaque ligne. Enfin j'essaye.
Code :
|
... ne marche pas
Je veux (en français): "Tous les caractères situés entre un = et un ;"
Marsh Posté le 31-10-2005 à 18:48:58
Essaie ça sur le contenu de ton fichier (sans splitter) :
Citation : |
Si ça fonctionne, essaie de comprendre la regexp, elle n'est pas bien compliquée.
Marsh Posté le 31-10-2005 à 19:29:13
Oh merci
je ne comprends pas le ([^\]*) ni le ([^;}*)
([^\]*) --> ce qui suit Propriete, en début de ligne ... et puis ? pourquoi le \] ?
pareil pour le 2eme ...
Tu pourrais me l'expliquer ?
Marsh Posté le 31-10-2005 à 19:48:57
ParadoX a écrit : Oh merci |
C'est pas ([^\]*) mais ([^\)]*).
[^\)] veut dire "n'importe quel caractère qui n'est pas une parenthèse fermante".
[^\)] veut dire "n'importe quel caractère qui n'est pas une parenthèse fermante", répété 0 ou plusieurs fois.
([^\)]) permet de capturer cette suite de caractères.
Pour le deuxième, c'est exactement pareil, sauf que c'est un point-virgule au lieu d'être une parenthèse fermante.
Marsh Posté le 31-10-2005 à 20:15:33
merci d'avoir pris le temps de m'expliquer
Marsh Posté le 31-10-2005 à 23:39:29
C'est encore moi avec une petite question (pour changer )
Pour la premiere partie, ça marche bien comme je le voulais:
Code :
|
donne ça:
Code :
|
Pour la partie "Rubriques", j'ai donc fait une 2eme recherche que voici:
Code :
|
et il me sort
Code :
|
... mais comment se fait-il qu'il ne me prenne pas en compte les "RubriquesSuperieures" ? Il ne trouve que les noms, et pourtant j'ai précisé comme regex: "Rubrique:, puis tout sauf un = une ou plusieurs fois, un autre =, puis tout sauf un ; plusieurs fois.
C'est quoi le truc ?
Marsh Posté le 01-11-2005 à 03:51:03
En reformulé, je voudrais faire UNE regex à partir de ces 2
Code :
|
Dans le cas des produits, il y avaient des ( ) partout, c'est ce qui a permis le repérage. Ici, ds le 1er cas on a un :Nom= et puis un RubriquesSuperieures=
C'est possible ?
Les 2 marchent séparément, pkoi pas ensembles ?
EDIT: Meme probleme avec la regex des produits, en fait. Il y a tout sauf le parametre "Rubriques=blablabla", forcément, car il échappe au masque. Comment l'ajouter ?
Marsh Posté le 01-11-2005 à 08:48:48
En fait, il faudrait expliquer ce que tu voudrais réellement que te sortent les tableaux parce qu'entre :
Rubriques=Accessoire de gymnastique|Bricolage
Rubrique:Nom=Accessoire de gymnastique
RubriquesSuperieures=Gymnastique|AccessoireRubrique:Nom=Gymnastique
Ca fait quand même trois "syntaxes" différentes, que j'ai d'ailleurs un peu de mal à saisir. Bref, tu voudrais que ça te sorte quoi, tout ça ?
Ton
Citation : $pattern_rubrique = '#Rubrique:([^=]*)=([^;]*)#'; |
ne te sort pas les RubriquesSuperieures parce que tu exiges un : après 'Rubrique'.
Marsh Posté le 01-11-2005 à 13:22:42
Bon je me suis peut etre ma exprimé
Il s'agit d'extraire, du fichier .txt, tous les produits et toutes les rubriques. Une ligen commence soit par 'Produit:' ou par 'Rubrique:'.
Alors je voulais faire une regex qui me sorte tous les attributs d'un produit, une regex qui me sorte tous les attributs d'une rubrique.
Tu m'as bien aidé avec
Code :
|
qui me sort presque tous les attributs d'un produit, à savoir
Code :
|
Est-il possible, dans cette meme regex, de lui faire également extraire le dernier attribut du produit qui est "Rubriques=", c'est à dire la rubrique à laquelle ce produit est subordonnée ? Que ça me donne qqch comme ça:
Code :
|
Et du coup, j'aimerais aussi la même chose pour les rubriques.
J'obtiens, grace à ça:
Code :
|
ceci:
Code :
|
Maintenant, je voudrais groupe ces 2 regex pour obtenir le tout d'un coup, comme ça:
Code :
|
C'est plus clair ?
Marsh Posté le 01-11-2005 à 14:16:53
RubriquesSuperieures=Gymnastique|AccessoireRubrique:Nom=Gymnastique;
Il manque pas un ; entre Accessoire et Rubrique ? Je pense que ça m'a un peu confusé, déjà...
Sinon, tes deux lignes n'ont pas la même forme, donc pourquoi essayer de les récupérer avec la même regexp ? Et quel intérêt surtout ?
Tu peux essayer quelque chose comme ça, m'enfin bon... :
Citation : |
Marsh Posté le 01-11-2005 à 15:01:26
Bon jle fais en plusieurs fois, merci beacoup pour tout ça, tu m'as bcp aidé !
Marsh Posté le 30-10-2005 à 16:11:49
Bonjour,
J'ai un projet PHP (création de site de commerce électronique, le truc typique ) à faire. Je ne vous demande en aucun cas de me faire le travail à ma place, je poserai juste quelques questions quand je suis bloqué. Comme maintenant, en somme (:D)
Je dois, à partir d'un fichier .txt formatté d'une certaine manière et fourni, créer une base de donnée mysql pour gérer les articles vendus sur le site de commerce en question. Ds un 1er temps, j'essaye d'extraire de ce fichier les infos qui m'intéresent.
Ce fichier .txt est le suivant (modèle):
Produit:Propriete(Libelle)=La barre de fer;Propriete(Prix)=29.90;Propriete(UniteDeVente)=l'unité;Descriptif=Barre Métallique|Accessoire|Gymnastique;Propriete(Photo)=barre_de_fer.jpg;Rubriques=Accessoire de gymnastique|Bricolage;Rubrique:Nom=Accessoire de gymnastique;RubriquesSuperieures=Gymnastique|AccessoireRubrique:Nom=Gymnastique;RubriquesSuperieures=Sport d'intérieur
Maintennant, j'ai fait ceci:
et ça marche (le tableau était pour tester, peut-être que c'est plus facile comme ça)
... et la, je souhaiterais extraire des infos spécifiques, comme par exemple "La barre de fer", c'est à dire ce qui est compris entre "Propriete(Libelle)=" et un ";". Puis j'aimerais extraire toutes les propriétés pour les utiliser lors de la création de la base de données.
Ce que je n'arrive pas à faire, c'est l'extraction. Si ereg() teste si un motif existe et ereg_replace() remplace un motif, comment en extraire un et le mettre ds une nouvelle variable ? Je débute en php, si quelqu'un pouvait me donner un indice ou 2, ça serait bien gentil
---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt