Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3367 connectés 

 


Dernière réponse
Sujet : [php] Comment découper une chaoine avec plsusieurs séparateurs....
XKobal MErci bcp !!!!!!!

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
XKobal MErci bcp !!!!!!!
FLY LM

XKobal a écrit a écrit :

C'est impeccable, ça marche nickel....
Merci 1000 fois....
 
Dis moi tu connaitrais pas une doc bien faite , voir un bouquin assez pointus sur les expressions régulières, car ça reste un grosse lacune pour moi ....  




 
Oui monsieur, "Maîtrise des expressions régulières" de chez O'Reilly : http://www.oreilly.fr/catalogue/regex.html
 
Dans ce bouquin, tu apprends à façonner tes expressions, comment fonctionne les différents moteur de Regexp... En gros, si tu comprends complètement ce bouquin, les expressions régulières n'auront plus aucun secret pour toi. Maintenant, ce bouquin ne traite pas de PHP, on parlera beaucoup du PERL qui est un langage où les expressions régulières sont très puissantes...
 
Il y a des docs sur les Regexp sous "PHP", mais ces docs vont juste te déballer la doc officielle avec quelques petits exemples, mais ça ne t'expliquera pas le fonctionnement intime du moteur de regexp et la manière de façonner une regexp...
 
Cf : http://www.php.net/  la doc officielle
     http://www.phpinfo.net/  tu trouveras deux articles sympas sur les Regexp en PHP (1 la lib standard, l'autre sur la PCRE)
 
@+ Bonne lecture...

XKobal C'est impeccable, ça marche nickel....
Merci 1000 fois....
 
Dis moi tu connaitrais pas une doc bien faite , voir un bouquin assez pointus sur les expressions régulières, car ça reste un grosse lacune pour moi ....
FLY LM Oups, j'm'a trompé, j'ai cliqué deux fois...
 
@+

 

[edtdd]--Message édité par fly LM--[/edtdd]

FLY LM

XKobal a écrit a écrit :

[quote]
Merci bcp, ton script est super.... J'avais commencer comme toi , mais je ne connaissait aps la fonction preg_replace.
 
Mais j'ai encore un petit souci... Il y a tjs un pb. Si el mot "Out" est en patern, alors le mot "tout" sera remplcé par cela "tOut", et ça je sais que c'est parce qu'il voit le texte comme un bloc. c'est pour ça que hier, je voulais le découper d'abord pour pouvoir l'analyser après, qu'en penses tu ???
Ou as tu une autre solution...
 
Merci 1000 fois en tout cas.
IL y a juste un pb ....  




 
Y-a une solution :
 
$pattern[0] = '\'([^\w])(LOI)([^\w])\'i';
$replace[0]= '$1<a href="http://www.hardware.fr/" target="_blank"><font color="#FF0000">$2</font></a>$3';
 
Tu ajoutes de ([^\w]) de part et d'autre du mot que tu veux reconnaitre et tu modifies le $replace en conséquence...
 
Là ca devrait être good...
 
@+

 

[edtdd]--Message édité par fly LM--[/edtdd]

FLY LM

SteF_DOBERMANN a écrit a écrit :

t'as plus qu'a traduire
c pour ca que je t donner la commande slpit tout à l'heure,
elle existe aussi en PHP  :D
il te suffit de trouver les bonnes fonctions PHP
comme ereg_replace("/[\n_r]/"," ",$text)
qui est à peut pret equivalent à $texte =~ s/[\n\r]/ /sg
enfin à vérifié
 
Vola  :D  




 
Ca a ni queue ni tête ta regexp !!! Pourquoi remplace les \n ou les \r par un espace !!! Aucun rapport avec son problème...
@+

XKobal

Citation :

Aller voilà un script qui devrait t'aider :  
 
************************************************************  
 
// La chaine où il faut effectuer les changements...  
 
$chaine ="Basé sur NCSA Mosaic. NCSA Mosaic(TM) a été développé par le National Center for Supercomputing Applications à l'Université de l'Illinois à Urbana-Champaign.  
Distribué sous contrat de licence par Spyglass, Inc.  
Contient des logiciels de sécurité de RSA Data Security Inc.  
Des parties de ce logiciel sont basées partiellement sur le travail de Independent JPEG Group.  
Contient une licence de logiciel client SOCKS accordée par Hummingbird Communications Ltd.  
Contient une licence de logiciel ASN.1 accordée par Open Systems Solutions, Inc.  
Les composants multimédias, notamment Indeo(R), de logiciels vidéo, Indeo(R) audio et d'effets pour la création de sites Web sont fournis par Intel Corp.  
La version Unix contient une licence de logiciel accordée par Mainsoft Corporation. Copyright (c) 1998 Mainsoft Corporation. Tous droits réservés. Mainsoft est une marque déposée de Mainsoft Corporation.  
Avertissement : ce logiciel est protégé par la loi relative au droit d'auteur et par les conventions internationales. Toute personne ne respectant pas ces dispositions se rendra coupable du délit de contrefaçon et sera passible des sanctions pénales prévues par la loi.";  
 
 
// Construire deux tableaux, -> faire un petit script pour cela, surtout si tes termes sont stockés en DB  
//  
// Exemple :  
//  
// $connect = @mysql_connect("SQL_HOST","USER","PASSWORD" );  
// $cfgBase = "tabase";  
//  $query = "SELECT mot,lien FROM table_terme";  
// $result = mysql_db_query ($cfgBase,$query) or die ("Erreur de connexion à la base de données" );  
// $i=0;  
// While($row = mysql_fetch_object($result)){  
//  $pattern[$i]='\'('.$row->mot.')\'i';  
//  $replace[$i]='<a href="'.$row->lien.'" target="_blank"><font color="#FF0000">$1</font></a>';  
//  ++$i;  
// }  
//  
// Un qui contient les motifs de reconnaissance  
// L'autre qui contient les expressions de remplacement  
 
$pattern[0] = '\'(LICENCE)\'i';  //Le i rend la reconnaissance insensible à la casse.  
$replace[0]= '<a href="http://www.hardware.fr/" target="_blank"><font color="#FF0000">$1</font></a>'; //$1 est une référence arrière (PHP ne cherche pas à l'évaluer car ma chaine est entre 'simple quote'), elle correspond à l'expression entre parenthèses (dites capturantes !!!) dans le motif de reconnaissance.  
$pattern[1] = '\'(intel)\'i';  
$replace[1]= '<a href="http://www.intel.fr/" target="_blank"><font color="#FF0000">$1</font></a>';  
$pattern[2] = '\'(open systems solutions)\'i';  
$replace[2]= '<a href="http://www.lycos.fr/" target="_blank"><font color="#FF0000">$1</font></a>';  
 
$chaine2 = preg_replace($pattern,$replace,$chaine); //La Regexp PCRE qui s'occupe de tout !!  
 
echo "<br>".$chaine2."<br>"; //affichage de la chaine modifiée  
 
************************************************************  
@+


 
Merci bcp, ton script est super.... J'avais commencer comme toi , mais je ne connaissait aps la fonction preg_replace.
 
Mais j'ai encore un petit souci... Il y a tjs un pb. Si el mot "Out" est en patern, alors le mot "tout" sera remplcé par cela "tOut", et ça je sais que c'est parce qu'il voit le texte comme un bloc. c'est pour ça que hier, je voulais le découper d'abord pour pouvoir l'analyser après, qu'en penses tu ???
Ou as tu une autre solution...
 
Merci 1000 fois en tout cas.
IL y a juste un pb ....

FLY LM Aller voilà un script qui devrait t'aider :
 
************************************************************
 
// La chaine où il faut effectuer les changements...
 
$chaine ="Basé sur NCSA Mosaic. NCSA Mosaic(TM) a été développé par le National Center for Supercomputing Applications à l'Université de l'Illinois à Urbana-Champaign.
Distribué sous contrat de licence par Spyglass, Inc.  
Contient des logiciels de sécurité de RSA Data Security Inc.
Des parties de ce logiciel sont basées partiellement sur le travail de Independent JPEG Group.
Contient une licence de logiciel client SOCKS accordée par Hummingbird Communications Ltd.
Contient une licence de logiciel ASN.1 accordée par Open Systems Solutions, Inc.
Les composants multimédias, notamment Indeo(R), de logiciels vidéo, Indeo(R) audio et d'effets pour la création de sites Web sont fournis par Intel Corp.
La version Unix contient une licence de logiciel accordée par Mainsoft Corporation. Copyright (c) 1998 Mainsoft Corporation. Tous droits réservés. Mainsoft est une marque déposée de Mainsoft Corporation.
Avertissement : ce logiciel est protégé par la loi relative au droit d'auteur et par les conventions internationales. Toute personne ne respectant pas ces dispositions se rendra coupable du délit de contrefaçon et sera passible des sanctions pénales prévues par la loi.";
 
 
// Construire deux tableaux, -> faire un petit script pour cela, surtout si tes termes sont stockés en DB
//
// Exemple :
//
// $connect = @mysql_connect("SQL_HOST","USER","PASSWORD" );
// $cfgBase = "tabase";
//  $query = "SELECT mot,lien FROM table_terme";
// $result = mysql_db_query ($cfgBase,$query) or die ("Erreur de connexion à la base de données" );
// $i=0;
// While($row = mysql_fetch_object($result)){
//  $pattern[$i]='\'('.$row->mot.')\'i';
//  $replace[$i]='<a href="'.$row->lien.'" target="_blank"><font color="#FF0000">$1</font></a>';
//  ++$i;
// }
//
// Un qui contient les motifs de reconnaissance
// L'autre qui contient les expressions de remplacement
 
$pattern[0] = '\'(LICENCE)\'i';  //Le i rend la reconnaissance insensible à la casse.
$replace[0]= '<a href="http://www.hardware.fr/" target="_blank"><font color="#FF0000">$1</font></a>'; //$1 est une référence arrière (PHP ne cherche pas à l'évaluer car ma chaine est entre 'simple quote'), elle correspond à l'expression entre parenthèses (dites capturantes !!!) dans le motif de reconnaissance.
$pattern[1] = '\'(intel)\'i';
$replace[1]= '<a href="http://www.intel.fr/" target="_blank"><font color="#FF0000">$1</font></a>';
$pattern[2] = '\'(open systems solutions)\'i';
$replace[2]= '<a href="http://www.lycos.fr/" target="_blank"><font color="#FF0000">$1</font></a>';
 
$chaine2 = preg_replace($pattern,$replace,$chaine); //La Regexp PCRE qui s'occupe de tout !!
 
echo "<br>".$chaine2."<br>"; //affichage de la chaine modifiée
 
************************************************************
@+
XKobal

Citation :

Le motif de ta RegExp est mal écrit, faut pas chercher plus loin...


 
Je pense que tu n'as pas tort !!!  :)

FLY LM Le motif de ta RegExp est mal écrit, faut pas chercher plus loin...
XKobal

Citation :

La casse, la case c'est pour faire Ungologolo...
 
-> eregi est insensible à la casse !!! Mais attention, les Regexp peuvent vite devenir un cauchemard pour les serveurs, si elles sont mal optimisées, sa rame et tu peux te tapper des "Time Out"...
 
@+


 
Et pour l'histoire du serveur, c'est aps grave, car ce sont des bouts de texte très court, le lexique n'excede pas les 100 mots et c'est un serveur dédié qui va éxécuter le script...

XKobal

Citation :

La casse, la case c'est pour faire Ungologolo...  
 
-> eregi est insensible à la casse !!! Mais attention, les Regexp peuvent vite devenir un cauchemard pour les serveurs, si elles sont mal optimisées, sa rame et tu peux te tapper des "Time Out"...  
 
@+


 
lol pour la case !!!
 
J'ai testé eregi aussi, et là , j'ai eu un autre pb, par exemple si "Out" est un des mots de mon lexique, alors si on trouve le mot "tout" dans le texte et il remplace et ça donne "t<a href='#'>Out</a>". Donc, ça ne va pas non plus....

stef_dobermann pas quand on a l'experience :lol:
FLY LM La casse, la case c'est pour faire Ungologolo...
 
-> eregi est insensible à la casse !!! Mais attention, les Regexp peuvent vite devenir un cauchemard pour les serveurs, si elles sont mal optimisées, sa rame et tu peux te tapper des "Time Out"...
 
@+
stef_dobermann t'as plus qu'a traduire
c pour ca que je t donner la commande slpit tout à l'heure,
elle existe aussi en PHP  :D
il te suffit de trouver les bonnes fonctions PHP
comme ereg_replace("/[\n_r]/"," ",$text)
qui est à peut pret equivalent à $texte =~ s/[\n\r]/ /sg
enfin à vérifié
 
Vola  :D
XKobal

Citation :

Dans ce cas, il n'est même pas nécessaire de découper ton texte, tu peux remplacer direct...  
Là j'ai pas le temps, mais avec un preg_replace() ou autre fonction de "Je reconnais - Je remplace", c'est tout à fait possible...  
Si j'ai le temps, je te fais cela demain...  
@+  


 
Bah écoute, si tu as le temps d'ici demain, ça m'arranegrai vachement, car la pcre_lib, ej ne connais pas du tout.
J'ai essayé avec ereg et ça va pas trop à cause de la case...
 
Merci à toi en tout cas

FLY LM

XKobal a écrit a écrit :

EUh, en fait, j'ai encore un peu besoin d'aide...
Donc, c'est bon, maintenant mon texte est découpé. J'ai fait cela pour comparer chaque mot à un lexique dans une base de donnée et si jamais le mot est le même alors il remplace par un lien.
Mais je bloque sur certaine choses. Comment ne pas tenir compte de la casse sans que par exemple si on a le mot "ont" dans le lexique, le mot "sont" ne soit pas pris pour le même mot avec le s...  
Je sais pas si je suis clair !!!!
 
En gros, j'ai besoin d'un script pour parser un bloc de texte contenu dans une base et créer un lien sur chaque mot de se texte qui est contenu dans mon lexique !!!!!  




 
Dans ce cas, il n'est même pas nécessaire de découper ton texte, tu peux remplacer direct...
Là j'ai pas le temps, mais avec un preg_replace() ou autre fonction de "Je reconnais - Je remplace", c'est tout à fait possible...
Si j'ai le temps, je te fais cela demain...
@+

XKobal Si seulement je pouvais le faire en PErl !!!!!
Mais le contrat pour ce site stipule : PHP !!!!! pffffffff  :fou:
stef_dobermann

Citation :

En gros, j'ai besoin d'un script pour parser un bloc de texte contenu dans une base et créer un lien sur chaque mot de se texte qui est contenu dans mon lexique !!!!!


 
En perl j'aurais fait ca :
$texte =~ s/[\n_r]/ /sg;
#parse sur espace
my @tab = slipt(/ /,$texte);
#dans @tab tu auras 1 mot par cellule
for (@tab) {
 #ensuite tu traite chaque mot
 #avec mot du text qui se trouve dans $_
}

XKobal Je galère durement... C'est pas mon boulot en plus... Moi ej fait du réseau d'habitude... et je bloque durement sur ça.
 
Si vous connaissez une solution aidez moi...
stef_dobermann j'aurais dit de monter un tableau de hachage (en Perl) ou une table de correspondance mais je ne connais pas de solution
PS : la case est je crois la différenciation entre les majuscules et les minuscules
XKobal EUh, en fait, j'ai encore un peu besoin d'aide...
Donc, c'est bon, maintenant mon texte est découpé. J'ai fait cela pour comparer chaque mot à un lexique dans une base de donnée et si jamais le mot est le même alors il remplace par un lien.
Mais je bloque sur certaine choses. Comment ne pas tenir compte de la casse sans que par exemple si on a le mot "ont" dans le lexique, le mot "sont" ne soit pas pris pour le même mot avec le s...  
Je sais pas si je suis clair !!!!
 
En gros, j'ai besoin d'un script pour parser un bloc de texte contenu dans une base et créer un lien sur chaque mot de se texte qui est contenu dans mon lexique !!!!!
stef_dobermann bon si c pour boulot on parle constructif
tu veux faire koi?
données en entrés => données en sortie
stef_dobermann Je ne connais pas tout et suis loin de tout connaitre
Manque d'expérience en PHP oui c claire
 
Mon frere et moi une grande histoire  :pt1cable:
XKobal Merci pour vos réponses, c'est parafit !!!!!! =)
FLY LM Pas c'est super, tu connais tout !!!
 
Manque d'expérience alors ???
 
J'plaisante :lol: :lol: :lol:
 
Sacré loustiques toi et ton frère !!!
dropsy

XKobal a écrit a écrit :

Voilà je voudrait découper un morceau de texte qui comporte plusieurs séparateurs (",;:!?. " ) afin d'isoler chaque mot. J'ai essayé avec strtok, mais le pb, c'est que lorsque 2 séparateur se suive, et bien la boucle s'arrette....
 
Merci de m'aider.. C'est pour le boulot.  




et prkoi ne pas remplacer tous les séparateurs par un seul avec strtr puis faire un explode sur ce séparateur unique?

stef_dobermann je connais asses bien le lmanguage Perl mais cette bib !!
FLY LM

SteF_DOBERMANN a écrit a écrit :

je connais asses bien le regxp dit aussi expression réguliére
mais je ne connais pas cette fonction en PHP
preg_match_all  




 
Elle fait partie de la librairie PCRE, autrement dit les expressions régulières compatible PERL ("Enfin, il y a quelques différences avec le PERL quand même).
 
http://www.php.net/manual/en/ref.pcre.php
 
----------
/\ | | /\
\/ |_| \/
|  | | |
----------
 
@+

stef_dobermann je connais asses bien le regxp dit aussi expression réguliére
mais je ne connais pas cette fonction en PHP
preg_match_all
FLY LM J'adore les Regexp :
 
<?php
 
$chaine = "titi? toto : tata , tutu. ;tyty!";
 
preg_match_all("/([^\,|;|:|!|?|.|\s]+)/",$chaine,$reg,PREG_PATTERN_ORDER);
 
$i=0;
while(strlen($reg[1][$i])!=0)
{
 echo trim($reg[1][$i])."<br>";
 ++$i;
}
 
?>
stef_dobermann ya une commande qui s'appelle split et une autre explode
essai le
XKobal Voilà je voudrait découper un morceau de texte qui comporte plusieurs séparateurs (",;:!?. " ) afin d'isoler chaque mot. J'ai essayé avec strtok, mais le pb, c'est que lorsque 2 séparateur se suive, et bien la boucle s'arrette....
 
Merci de m'aider.. C'est pour le boulot.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)