stocker dans une var une partie de chaine entourée de chaine

lulululu
Invité n'ayant pas de compte PHPfrance

03 mars 2007, 17:14

Bonjour les gens

voilà, c'est pour faire du simili bbcode maison

j'ai au départ ceci:

Code : Tout sélectionner

$texte = ' bonjour, [[personne]]lulu[[/personne] est le plus beau ';
et je voudrais obtenir au final en html:

Code : Tout sélectionner

$texte_html =' bonjour, <a href="personne.php?id=lulu" title="lulu">lulu</a> est le plus beau ';
Voyez-vous, je n'ai pas su trouver des fonctions qui remplacent mes balises [[balise]] ET AUSSI qui stockent ce qu'il y a entre (lulu dans cet exemple) qui doit me reservir en tant que variable.

Vouala, au secours à l'aide, si quelqu'un a une piste ;-)
merci merci

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

03 mars 2007, 18:09

Regardes du côté expressions régulières sur le site (http://www.phpfrance.com/tutoriaux/inde ... pcre-ripat) et des fonction ereg_replace() ou preg_replace() :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

lulululu
Invité n'ayant pas de compte PHPfrance

03 mars 2007, 20:03

merci pour cette réponse !
mais je trouve pas ...

Je précise encore une fois l'aide dont j'ai besoin:

1-Remplacer une chaine par une autre (très simple ça)

2-"Variabiliser" une partie de cette chaine située entre 2 autres parties identifiées pour la réutiliser (ça j'y arrive pô)

ViPHP
ViPHP | 4674 Messages

03 mars 2007, 20:20

Tu as tout dans le lien que Ryle t'as donné.
On est pas ici pour faire le travail à la place des gens. Volontaire : ok ; Nègre : nok.

Tu peux accéder au tutorial plus directement depuis Lumadis.be puis Tutoriel expressions régulières.
Tu as aussi des exemples sur ExpReg.com : Expressions régulières et rationnelles ; bon site.

Avec ça, tu peux résoudre ton problème, tu as les outils nécessaires.

En revanche, si tu n'arrives pas utiliser correctement les regex (Regular Expressions, soit littéralement Expressions Régulières), on peut t'aider volontier.


Bonne soirée :)
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

lulululu
Invité n'ayant pas de compte PHPfrance

04 mars 2007, 17:20

En revanche, si tu n'arrives pas utiliser correctement les regex (Regular Expressions, soit littéralement Expressions Régulières), on peut t'aider volontier.
besoin d'aide ...?!

Je suis un forum d'aide au php, je suis poli, je poste dans la rubrique "débuter",
je ne poste pas une question de type "j'aimerai créer mon cms tout seul" mais quelque chose de suffisamment ciblé pour susciter une réponse ma question ...
donc oui je dois avoir besoin d'aide non ?

... avec les expressions régulières sur lesquelles je n'ai pas envie de créer une thèse (et oui, je suis très fainéant, pardon ), mais surtout une réponse à ma question

Code : Tout sélectionner

if ( $capacité_technique and $envie ) { $solution = "ouaii super"; } else $solution = "ok j'me demerde tout seul sur internet";
merci encore pour les pistes (ô surprise, j'avais déjà épluché un gros tas de bouts de codes sur googueule sans trouver ces quelques lignes de codes salvatrices, c'est même pour ça que je poste ici)

un dernier mot qui ravira mon esprit politiquement très correcte:
wikipédia le sage nous enseigne ceci:
Nègre est un substantif masculin et un adjectif, désignant des personnes à la peau noire.

Le substantif, dans les pays francophones, dans sa connotation moderne, est hautement péjoratif.
gros bisous et encore merci, on progresse bien en php ici, c'est meme sur phpfrance.com que j'ai appris mes rudiments de php y a 5 /6 ans

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

04 mars 2007, 20:46

Avant d'entrer dans une quelconque polémique qui n'a nullement sa place sur ce site, je me permet de rappeler que Wikipédia est un site internet permettant à n'importe qui de poster n'importe quoi sans autre contrôle que celui de n'importe qui d'autre. Et si je m'en réfère à n'importe quel dictionnaire de la langue française, validé par l'académie éponyme, et que je pousse la curiosité jusqu'à aller lire le petit "2" qui correspond au sens second que peut prendre ce mot, je trouve : "(nom masculin) Personne qui rédige un texte, réalise un travail pour une autre qui le signera de son nom."

Je serais mesquin, j'irais jusqu'à dire que si tu lis les documentations techniques comme le dictionnaire, je comprend que tu n'ais pas trouvé de solution à ton problème. Mais comme je suis un garçon poli, je ne le dirais pas et me contenterais de le penser seulement.

Maintenant pour clore cette parenthèse et en revenir à ton problème, ce qui serait bien c'est de nous montrer ce que tu as réussi à faire. Cela nous permet de voir où tu en es, ce qui te bloque et t'aider à progresser sans pour autant te donner une solution clé en main.

En l'occurence, si tu as pris le temps de regarder comment fonctionnait les expressions régulières, tu as du voir ce qu'étaient les parenthèses capturantes, permettant de "Variabiliser une partie de cette chaine située entre 2 autres parties identifiées".
A partir de là, et avec le premier exemple donné dans la documentation de la fonction ereg_replace() tu aurais pu voir comment capturer une partie d'une chaine "pour la réutiliser".

Et si malgré cela tu n'y arrives toujours pas, je t'invite encore une fois à nous montrer ce que tu as fait, ce que tu as compris, ce que tu ne comprend pas pour que l'on puisse t'aider ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

lulululu
Invité n'ayant pas de compte PHPfrance

04 mars 2007, 23:46

Code : Tout sélectionner

Avant d'entrer dans une quelconque polémique qui n'a nullement sa place sur ce site
Bin non, c'est sur ça, c'est pas ici qu'on va polémiquer...

Code : Tout sélectionner

je me permet de rappeler que Wikipédia est un site internet permettant à n'importe qui de poster n'importe quoi sans autre contrôle que celui de n'importe qui d'autre.
ah bin du coup si alors, on va polémiquer, chouette chouette ya pas Stallone à la TV !

Je traduis donc ce que j'ai cru comprendre en "version qui-me-fais-rire":

1 - Wikipedia comme chacun le sait, c'est tout pourri, on laisse nos gosses faire leurs exposés de classe avec, mais méfions-nous quand même hein, faut pas rigoler avec ça....

2 - Validez tout ce que vous lisez sur le web par l'Académie ... une minute de silence respectueuse pour cette institution qui comme chacun le sait est composée de gens avec toute la vigueur de l'age mur et à la classe sociale nécessaire à l'adéquation avec notre société actuelle


Question nunuche (j'excelle en ce moment dans le domaine n'est-ce pas ?) :

Ce forum-ci est-il valable, j'entends validé par l'Académie (je suis à genou chaque fois que je dis 'académie' je le jure !!) ou comme Wikipédia, faut pas lire ?
ça serait dommage, parce que j'y ai appris un tas de choses, des mots tels que académie, éponyme, et même des fois du php (si si je suis sérieux !)

Amis Phpiens, méfions du concept "un site internet permettant à n'importe qui de poster n'importe quoi sans autre contrôle que celui de n'importe qui d'autre" ...
Pinaise, ça va en faire des sites à contrôler, et même temps, ça va résorber le chômage: l'Académie recrute !

Pour les définitions dont on parlera pas ici parce-que c'est pas l'endroit tout ça, je collerais quand-même quelques synonymes:
prete-nom (je pense le plus efficace) intermédiaire, mandataire, représentant, fantoche, homme de paille, pantin, polichinelle, marionnette.
Et de ces termes-là, aucun me choque, bizarrement ... je sais pas vous
décidemment, je suis très politiquement correcte, je m'en excuse.

Merci pour la joie de cet échange ... et aussi pour les pistes avec ereg_replace:
évidemment j'ai pas su "variabiliser" avec, mais c'est pas comme si j'étais venu sur un forum pour avoir de l'aide, je voulais juste parler chiffon ...

J'ai réussi à faire ceci selon tes pistes:

Code : Tout sélectionner

$string = "Ceci fut un test"; echo ereg_replace("( )fut", "test", $string); // affiche "Ceci est un test" vouala vouala

à très bientôt !
le prete-nom

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

05 mars 2007, 01:33

Merci pour la joie de cet échange ... et aussi pour les pistes avec ereg_replace:
évidemment j'ai pas su "variabiliser" avec, mais c'est pas comme si j'étais venu sur un forum pour avoir de l'aide, je voulais juste parler chiffon ...

J'ai réussi à faire ceci selon tes pistes:

Code : Tout sélectionner

$string = "Ceci fut un test"; echo ereg_replace("( )fut", "test", $string); // affiche "Ceci est un test" vouala vouala
En l'occurence, si une fois encore tu étais allé un peu plus loin et que tu l'avais testé, tu aurais constaté que le résultat du code que tu donnes ici affiche en réalité : "Cecitest un test", et que ce sont le 'fut' et l'espace capturé par les parenthèse qui sont remplacés.

En t'interessant un minimum aux parenthèses, qui n'ont pas du manquer dans le "gros tas de bouts de codes sur googueule", ou ne serait ce que dans l'exemple, tu aurais aussi vu que la parenthèse avait capturé l'espace qui précède le 'fut' et que, comme la doc le montre, tu pouvais coller la valeur capturée n'importe où dans ta chaine avec \\1.

Maintenant si ça ne te suffit toujours pas, je cède la place à d'autres qui auront plus de courage ou de volonté que moi pour poursuivre, personnellement j'abandonne.

Quant au reste, je ne ferais pas de commentaire, mais te remercierais juste d'avoir eu la gentillesse de confirmer le fond de ma pensée.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 49 Messages

05 mars 2007, 07:05

1 - je suis extrêmement mauvais en ce qui concerne les regex.
2 - j'ai lu la doc (article de phpfrance)
et j'ai trouvé en 2mins49 secondes (chronométré) :
$texte = '
bonjour,
[[personne]]lulu[[/personne]] est le plus beau
';
$pattern = "/\[\[personne]](.*)\[\[\/personne]]/";
$replace = '<a href="personne.php?id=\\1">\\1</a>';
echo preg_replace($pattern,$replace,$texte);
:roll: un peu plus d'efforts la prochaine fois ;)


[up] Mécontent de moi ^^ ça ne marchait pas avec :
[[personne]]toto[[/personne]] n'aime pas [[personne]]tutu[[/personne]]

j'ai modifié en rajoutant le paramètre U ("non hungry")
$texte = '
bonjour,
[[personne]]lulu[[/personne]] est le plus beau et [[personne]]trucmuche[[/personne]] le plus vilain
';
$pattern = "/\[\[personne]](.+)\[\[\/personne]]/U";
$replace = '<a href="personne.php?id=\\1">\\1</a>';
$replace = $replace;
echo preg_replace($pattern,$replace,$texte);

Par contre, d'expérience, je ne saurai trop te conseiller d'utiliser preg_replace_callback() avec une fonction de "nettoyage" des noms de tes utilisateurs... Tu auras vite fait de te retrouver avec des pseudos du genre :
$uP3rB0|_|L3t
;)

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

05 mars 2007, 12:55

Tu as eu ta réponse, dommage j'aurais préféré que tu cherches. M'enfin on va quand-même mettre les points sur les I pour que tes futures interventions soient plus sereines.
Je suis un forum d'aide au php, je suis poli, je poste dans la rubrique "débuter",
En effet, dans cette section nous aidons ceux qui sont débutants à ne plus l'être. Pour cela nous les redirigeons vers une doc de qualité quand elle existe, nous répondons à certains points techniques qui relèvent d'une incompréhension du concept ou de la doc. Mais nous ne donnons jamais (enfin si, ça arrive, quand je suis de mauvais poil je balance une solution toute faite, mais honnêtement ça n'a aucun intérêt).
... avec les expressions régulières sur lesquelles je n'ai pas envie de créer une thèse (et oui, je suis très fainéant, pardon ), mais surtout une réponse à ma question
Les expressions régulières sont très souvent utilisées, tu vas venir ici à chaque fois ? Ou tu préfères qu'on t'aide à comprendre les regexp afin que tu sois autonome ? Il n'est pas question de faire une thèse, simplement de comprendre et savoir utiliser.

Code : Tout sélectionner

if ( $capacité_technique and $envie ) { $solution = "ouaii super"; } else $solution = "ok j'me demerde tout seul sur internet";
Tu as très bien situé. $capacité_technique === true je te rassure. Par contre effectivement, $envie passe vite à false quand on voit ce genre de réaction :)

Ah puis quand-même, concernant le mot "nègre" :
http://fr.wikipedia.org/wiki/N%C3%A8gre ... rents_sens
* L'emploi du mot « nègre » pour désigner une personne qui écrit pour le compte d'une autre, sans être mentionnée, provient probablement d'une assimilation entre « nègre » et « esclave », attestée par des expressions comme « travailler comme un nègre ». Dans ce cas-là, le mot anglais est ghostwriter. Pour éviter que cette expression française soit mal perçue, l'utilisation des termes écrivain privé, ou écrivain sous-traitant, ou encore du terme anglais seraient alors préférable.

lulululu
Invité n'ayant pas de compte PHPfrance

05 mars 2007, 13:46

Bin vouala, un grand merci ghalaad, pile-poil ce que je cherchais !
j'ai intégré et ça marche niquel !

Et maintenant, vu que je suis pas doué du tout, après avoir lu la doc, après avoir chercher sur google, après avoir enervé (pourquoi déjà ?) les gens ici, et finalement devant cet exemple très concret qui execute ce que je voulais, je vais essayer de comprendre avec ton bout de code ce que fait concretement le regex...

Je fais donc tout ça à l'envers, heyyyy ouii !

C'est la mauvaise méthodologie et cela révèle mon esprit faible, parce-que (je me répète là je sais) j'ai cherché avant de demander, j'ai lu la doc, et j'ai pas compris.
M'enfin bon, voici ce que je pense de tout ça:
Il y a les bons, et il y a moi, au moins si j'ai servi à queq chose pour vous aider à mieux vous situer, la mini exitation de ces échanges vous seront au final bénéfique !
Un grand merci d'administrer ce forum et de délivrer à tous le savoir, pardon à ceux que j'ai embété et surtout merci pour la réponse ultra concrète, elle m'aide a avancer dans mon projet, mais aussi à comprendre, et mettons nous touts à rever, à apprendre le php !
Un gros bisous à tous !

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

05 mars 2007, 13:57

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton [Mettre Résolu] qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.