Petit soucis de regex
11 messages
• Page 1 sur 1
-

NxtGen - WRInaute impliqué

- Messages: 762
- Inscription: 24 Oct 2006
Petit soucis de regex
Bonjour à tous,
Je séche un peu avec les regex
Voici ce que je voudrais faire :
j'aimerais qu'a grands coups de regex, j'obtienne :
Le principe étant de supprimer les citations imbriquées les unes dans les autres sur mon forum.
Pour l'instant j'ai :
mais ca n'a pas l'air de fonctionner terrible
Quelqu'un aurait une idée ?
Merci
Je séche un peu avec les regex
Voici ce que je voudrais faire :
- Code: Tout sélectionner
$texte = '[quote][quote]citation1[/quote]citation2[/quote]';
j'aimerais qu'a grands coups de regex, j'obtienne :
- Code: Tout sélectionner
$texte = '[quote]citation2[/quote]';
Le principe étant de supprimer les citations imbriquées les unes dans les autres sur mon forum.
Pour l'instant j'ai :
- Code: Tout sélectionner
// Récupére toutes les citations
$match_count = preg_match_all("#\[quote\](.*?)\[/quote\]#is", $text, $matches);
for ( $i=0; $i<$match_count; $i++ ) {
// Remplace les citation imbriquées
$innertext = preg_replace("#\[quote\](.*?)\[/quote\]#is", '', $matches[1][$i]);
}
mais ca n'a pas l'air de fonctionner terrible
Quelqu'un aurait une idée ?
Merci
-

ortolojf - WRInaute passionné

- Messages: 1676
- Inscription: 14 Aoû 2002
Re: Petit soucis de regex
Bonsoir
Une fonction récursive ?
Cà me donne l'impression d'une logique récursive.
Mais avec preg_replace() , ça devrait coller, non ?
Je ne connais pas preg_replace(), ni les fonctions type PCRE.
Amicalement.
Jean-François Ortolo
Une fonction récursive ?
Cà me donne l'impression d'une logique récursive.
Mais avec preg_replace() , ça devrait coller, non ?
Je ne connais pas preg_replace(), ni les fonctions type PCRE.
Amicalement.
Jean-François Ortolo
-

RiPSO - WRInaute passionné

- Messages: 1591
- Inscription: 4 Oct 2007
Re: Petit soucis de regex
pour moi c'est pas possible à coup de regex je pense...
y'a tellement de maniere d'imbriquer les quotes dans les autres quotes, de mettre un truc entre deux quote... etc...
mais le plus simple je pense c'est que quand quelqu'un clic sur un bouton "citer" pour repondre, tu devrais retirer tout ce qui est quoté dans le message cité et dans ce cas il te restera que la reponse du gars cité. Dur a expliquer
y'a tellement de maniere d'imbriquer les quotes dans les autres quotes, de mettre un truc entre deux quote... etc...
mais le plus simple je pense c'est que quand quelqu'un clic sur un bouton "citer" pour repondre, tu devrais retirer tout ce qui est quoté dans le message cité et dans ce cas il te restera que la reponse du gars cité. Dur a expliquer
-

NxtGen - WRInaute impliqué

- Messages: 762
- Inscription: 24 Oct 2006
Re: Petit soucis de regex
Ben ca reviens exactement à faire ce que je veux loul
et c'est bien la le soucis, c'est que je ne sais pas comment faire ça ^^
Le gars clique sur "citer", donc le textarea est prérempli avec [quote]blablabla[/quote], voire [quote][quote]blabla1[/quote]bblabla2[/quote], c'est pareil, comme faire pour ne garder que [quote]blabla2[/quote] ?
Edit : a ben non ca revient pas au même en fait, t'as raison ca peut marcher
Edit 2 : avec tout ces [quote][quote] va y avoir de la pub pour le blanc de poulet sur WRI
Edit 3 : Ayé mis en place et ca fonctionne achement bien Merci
et c'est bien la le soucis, c'est que je ne sais pas comment faire ça ^^
Le gars clique sur "citer", donc le textarea est prérempli avec [quote]blablabla[/quote], voire [quote][quote]blabla1[/quote]bblabla2[/quote], c'est pareil, comme faire pour ne garder que [quote]blabla2[/quote] ?
Edit : a ben non ca revient pas au même en fait, t'as raison ca peut marcher
Edit 2 : avec tout ces [quote][quote] va y avoir de la pub pour le blanc de poulet sur WRI
Edit 3 : Ayé mis en place et ca fonctionne achement bien Merci
-

ortolojf - WRInaute passionné

- Messages: 1676
- Inscription: 14 Aoû 2002
Re: Petit soucis de regex
Avec une fonction récursive...
Compte tenu du fait que les balises \[quote\] et \[/quote\] sont "nestées" :
Dans ce qui suit, les variables indices $i et la variable indicée, sont globales.
- Condition d'appel à la fonction récursive ( même à partir de celle-ci ) : rencontrer le token ouvrant \[quote\], ce qui donne lieu à l'élimination de ce token de la chaîne de caractère lue.
- La logique de présentation de cette chaîne de caractère au départ, suppose qu'elle commence par le token \[quote\], qui précède tout texte antérieur, théoriquement. Dites-moi si je me trompe.
- Traitement dans la fonction récursive : incrémenter un indice $i par exemple, et mettre dans une variable indicée le contenu du reste de la chaîne de caractère, jusu'au premier token \[quote\] ou \[/quote\] non compris.
- Au cours du traitement dans la fonction récursive, l'un des deux tokens \[quote\] ou \[/quote\] peut être rencontré.
- Si le token \[/quote\] est rencontré, on l'enlève de la chaîne de caractères, et on sort de la fonction récursive avec un return.
- Si le token \[quote\] est rencontré, on l'enlève de la chaîne de caractère, et on appelle de nouveau la même fonction ( récursive ).
- Quand la chaîne de caractère a été parcourue jusqu'au bout, le nombre de balises ouvrantes fermantes rencontrées, est le même, puisque ces balises sont "nestées".
-----------------------------------
En fait, j'ai moi-même eu à programmer quelque chose d'équivalent pour du parsing de texte html, où la condition d'entrée était de rencontrer la balise \<table ...\> ou " ... " peut être n'importe quoi, et la condition de sortie était de rencontrer la balise fermante \</table\>
Je me suis débrouillé avec deux fonctions non récursives, mais le traitement était assez complexe, avec des if-else etc...
Je suis désolé de na pas communiquer ou adapter ces fonctions. En gros, la philosophie est de faire tel ou tel traitement dans les cas suivants:
\<table \> suivi de contenu suivi de \</table\>
\<table \> suivi de contenu suivi de \<table \>
\</table\> suivi de contenu suivi de \<table \>
\</table\> suivi de contenu suivi de \</table\>
Amicalement.
Jean-François Ortolo
Compte tenu du fait que les balises \[quote\] et \[/quote\] sont "nestées" :
Dans ce qui suit, les variables indices $i et la variable indicée, sont globales.
- Condition d'appel à la fonction récursive ( même à partir de celle-ci ) : rencontrer le token ouvrant \[quote\], ce qui donne lieu à l'élimination de ce token de la chaîne de caractère lue.
- La logique de présentation de cette chaîne de caractère au départ, suppose qu'elle commence par le token \[quote\], qui précède tout texte antérieur, théoriquement. Dites-moi si je me trompe.
- Traitement dans la fonction récursive : incrémenter un indice $i par exemple, et mettre dans une variable indicée le contenu du reste de la chaîne de caractère, jusu'au premier token \[quote\] ou \[/quote\] non compris.
- Au cours du traitement dans la fonction récursive, l'un des deux tokens \[quote\] ou \[/quote\] peut être rencontré.
- Si le token \[/quote\] est rencontré, on l'enlève de la chaîne de caractères, et on sort de la fonction récursive avec un return.
- Si le token \[quote\] est rencontré, on l'enlève de la chaîne de caractère, et on appelle de nouveau la même fonction ( récursive ).
- Quand la chaîne de caractère a été parcourue jusqu'au bout, le nombre de balises ouvrantes fermantes rencontrées, est le même, puisque ces balises sont "nestées".
-----------------------------------
En fait, j'ai moi-même eu à programmer quelque chose d'équivalent pour du parsing de texte html, où la condition d'entrée était de rencontrer la balise \<table ...\> ou " ... " peut être n'importe quoi, et la condition de sortie était de rencontrer la balise fermante \</table\>
Je me suis débrouillé avec deux fonctions non récursives, mais le traitement était assez complexe, avec des if-else etc...
Je suis désolé de na pas communiquer ou adapter ces fonctions. En gros, la philosophie est de faire tel ou tel traitement dans les cas suivants:
\<table \> suivi de contenu suivi de \</table\>
\<table \> suivi de contenu suivi de \<table \>
\</table\> suivi de contenu suivi de \<table \>
\</table\> suivi de contenu suivi de \</table\>
Amicalement.
Jean-François Ortolo
-

NxtGen - WRInaute impliqué

- Messages: 762
- Inscription: 24 Oct 2006
Re: Petit soucis de regex
Merci pour ton message même si je n'ai pas tout compris ^^
par contre, il existe un moyen simple pour ton cas avec les <table> en regex
avec ca tu récupére sans soucis
<table>contenu</table>
<table class="red">contenu</table>
<TABLE >contenu</table >
([^>]*) dans la regex signifie "tout sauf '<'" ce qui correspond bien à ce que tu voulais faire non ?
par contre, il existe un moyen simple pour ton cas avec les <table> en regex
- Code: Tout sélectionner
$match_count = preg_match_all("#<table([^>]*)>(.*)<\/table([^>]*)>#isU", $variable, $matches);
avec ca tu récupére sans soucis
<table>contenu</table>
<table class="red">contenu</table>
<TABLE >contenu</table >
([^>]*) dans la regex signifie "tout sauf '<'" ce qui correspond bien à ce que tu voulais faire non ?
-

ortolojf - WRInaute passionné

- Messages: 1676
- Inscription: 14 Aoû 2002
Re: Petit soucis de regex
NxtGen a écrit:Merci pour ton message même si je n'ai pas tout compris ^^
par contre, il existe un moyen simple pour ton cas avec les <table> en regex
- Code: Tout sélectionner
$match_count = preg_match_all("#<table([^>]*)>(.*)<\/table([^>]*)>#isU", $variable, $matches);
avec ca tu récupére sans soucis
<table>contenu</table>
<table class="red">contenu</table>
<TABLE >contenu</table >
([^>]*) dans la regex signifie "tout sauf '<'" ce qui correspond bien à ce que tu voulais faire non ?
Bonjour Monsieur
Le problème, c'est qu'il était éventuellement possible théoriquement, que plusieurs tables soient imbriquées l'une dans l'autre. ( C'est le cas ici ). Et également, il y avait un risque, pour que ces balises ne soient pas "nestées", sans oublier le bug ou le nombre de balises ouvrantes, ne soit égal au nombre de balises fermantes...
En fait, j'ai tenu compte de tous les cas, en partant d'une acquisition de données peu fiable. ;(
Merci beaucoup pour votre réponse.
Amicalement.
Jean-François Ortolo
-

ortolojf - WRInaute passionné

- Messages: 1676
- Inscription: 14 Aoû 2002
Re: Petit soucis de regex
Bonjour
Je ne connais rien aux motifs de caractères PCRE ( preg_replace() et autres ).
J'ai lu il y a longtemps, le livre "Algorithms in C" de Robert Sedgewicz, par l'éditeur Addison Wesley.
Anglais facile à lire...
Dedans, il y avait le problème des algorithmes récursifs, la façon de les "dérécursiver" ( que je n'ai pas appliquée dans ce problème que j'avais ), et plein d'informations scientifiques très intéressantes.
Je conseille ce livre ( je le lisais avant 1991 et aussi après ), à quiconque veut acquérir un peu de connsaissance théoriques en Informatique.
Très bon bouquin, très didactique et pédagogique...
Votre problème, me paraît avoir une logique récursive.
C'est possible ( je ne sais pas ), qu'avec des preg_replace() il soit possible de résoudre le problème facilement.
Il faudrait s'adresser au newgroup adapté pour cela, je ne me souviens plus duquel.
Amicalement.
Jean-François Ortolo
Je ne connais rien aux motifs de caractères PCRE ( preg_replace() et autres ).
J'ai lu il y a longtemps, le livre "Algorithms in C" de Robert Sedgewicz, par l'éditeur Addison Wesley.
Anglais facile à lire...
Dedans, il y avait le problème des algorithmes récursifs, la façon de les "dérécursiver" ( que je n'ai pas appliquée dans ce problème que j'avais ), et plein d'informations scientifiques très intéressantes.
Je conseille ce livre ( je le lisais avant 1991 et aussi après ), à quiconque veut acquérir un peu de connsaissance théoriques en Informatique.
Très bon bouquin, très didactique et pédagogique...
Votre problème, me paraît avoir une logique récursive.
C'est possible ( je ne sais pas ), qu'avec des preg_replace() il soit possible de résoudre le problème facilement.
Il faudrait s'adresser au newgroup adapté pour cela, je ne me souviens plus duquel.
Amicalement.
Jean-François Ortolo
11 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Petit PR Noël : la chanson au Père Noël Google :-) - 23-12-2002
- Nouveautés dans l'API Google Analytics (Septembre 2009) - 19-09-2009
- Google met à jour sa recherche locale - 15-09-2004
- Bingbot : le nom officiel du robot de Bing - 29-06-2010
- Parts de marché des moteurs aux USA (Mai 2008) - 20-06-2008
- Google rachète eBook Technologies Inc. (ETI) - 13-01-2011
- Google rachète JotSpot, spécialiste du wiki - 31-10-2006
- Nuage de tags Wordle pour WebRankInfo - 29-04-2009
Consultez la description détaillée des produits ou services de Google suivants : JotSpot
- Synthèse du référencement Google
Cet outil vous donne un petit résumé de l'état de référencement de votre site dans Google. - Détection de pages dupliquées
Cet outil vous permet de calculer la similarité entre 2 pages web. L'algorithme utilisé repose sur l'analyse des occurrences des mots (mais pas sur leur positionnement dans les pages). Google utilise cette notion à certains endroits dans son algorithme, mais de façon bien plus évoluée que ce petit outil... Avoir des pages trop similaires peut entraîner des problèmes d'indexation... Cet outil vous permettra peut-être de résoudre certains problèmes de contenus dupliqués.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
