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

  FORUM HardWare.fr
  Programmation

  [php] Comment découper une chaoine avec plsusieurs séparateurs....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php] Comment découper une chaoine avec plsusieurs séparateurs....

n°78519
XKobal
Posté le 05-12-2001 à 17:13:39  profilanswer
 

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.

mood
Publicité
Posté le 05-12-2001 à 17:13:39  profilanswer
 

n°78527
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 17:19:21  profilanswer
 

ya une commande qui s'appelle split et une autre explode
essai le


---------------
Tout à commencé par un rêve...
n°78531
FLY LM
Posté le 05-12-2001 à 17:29:10  profilanswer
 

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;
}
 
?>

n°78532
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 17:32:55  profilanswer
 

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


---------------
Tout à commencé par un rêve...
n°78538
FLY LM
Posté le 05-12-2001 à 17:39:03  profilanswer
 

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
 
----------
/\ | | /\
\/ |_| \/
|  | | |
----------
 
@+

n°78541
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 17:40:39  profilanswer
 

je connais asses bien le lmanguage Perl mais cette bib !!


---------------
Tout à commencé par un rêve...
n°78545
dropsy
et bonne chance surtout...
Posté le 05-12-2001 à 17:42:52  profilanswer
 

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?

n°78546
FLY LM
Posté le 05-12-2001 à 17:43:57  profilanswer
 

Pas c'est super, tu connais tout !!!
 
Manque d'expérience alors ???
 
J'plaisante :lol: :lol: :lol:
 
Sacré loustiques toi et ton frère !!!

n°78547
XKobal
Posté le 05-12-2001 à 17:44:50  profilanswer
 

Merci pour vos réponses, c'est parafit !!!!!! =)

n°78549
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 17:46:34  profilanswer
 

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:


---------------
Tout à commencé par un rêve...
mood
Publicité
Posté le 05-12-2001 à 17:46:34  profilanswer
 

n°78552
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 17:47:22  profilanswer
 

bon si c pour boulot on parle constructif
tu veux faire koi?
données en entrés => données en sortie


---------------
Tout à commencé par un rêve...
n°78556
XKobal
Posté le 05-12-2001 à 17:53:21  profilanswer
 

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 !!!!!

n°78559
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 17:56:40  profilanswer
 

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


---------------
Tout à commencé par un rêve...
n°78562
XKobal
Posté le 05-12-2001 à 17:59:07  profilanswer
 

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...

n°78564
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 18:01:46  profilanswer
 

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 $_
}


---------------
Tout à commencé par un rêve...
n°78572
XKobal
Posté le 05-12-2001 à 18:08:26  profilanswer
 

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

n°78577
FLY LM
Posté le 05-12-2001 à 18:16:26  profilanswer
 

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...
@+

n°78581
XKobal
Posté le 05-12-2001 à 18:22:06  profilanswer
 

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

n°78582
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 18:23:32  profilanswer
 

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


---------------
Tout à commencé par un rêve...
n°78583
FLY LM
Posté le 05-12-2001 à 18:25:21  profilanswer
 

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"...
 
@+

n°78587
stef_dober​mann
Personne n'est parfait ...
Posté le 05-12-2001 à 18:28:19  profilanswer
 

pas quand on a l'experience :lol:


---------------
Tout à commencé par un rêve...
n°78589
XKobal
Posté le 05-12-2001 à 18:28:46  profilanswer
 

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....

n°78590
XKobal
Posté le 05-12-2001 à 18:30:12  profilanswer
 

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...

n°78591
FLY LM
Posté le 05-12-2001 à 18:30:13  profilanswer
 

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

n°78594
XKobal
Posté le 05-12-2001 à 18:31:57  profilanswer
 

Citation :

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


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

n°78698
FLY LM
Posté le 06-12-2001 à 09:43:10  profilanswer
 

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
 
************************************************************
@+

n°78722
XKobal
Posté le 06-12-2001 à 10:51:15  profilanswer
 

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 ....

n°78723
FLY LM
Posté le 06-12-2001 à 10:53:03  profilanswer
 

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...
@+

n°78753
FLY LM
Posté le 06-12-2001 à 11:53:56  profilanswer
 

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]

n°78754
FLY LM
Posté le 06-12-2001 à 11:54:15  profilanswer
 

Oups, j'm'a trompé, j'ai cliqué deux fois...
 
@+

 

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

n°78759
XKobal
Posté le 06-12-2001 à 12:10:20  profilanswer
 

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 ....

n°78777
FLY LM
Posté le 06-12-2001 à 13:22:55  profilanswer
 

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...

n°78810
XKobal
Posté le 06-12-2001 à 14:39:43  profilanswer
 

MErci bcp !!!!!!!

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [php] Comment découper une chaoine avec plsusieurs séparateurs....

 

Sujets relatifs
ASP => Decouper une chaine[HTML] découper une image...
Plus de sujets relatifs à : [php] Comment découper une chaoine avec plsusieurs séparateurs....


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