Communauté Informatique NDFR.net : Exprimer une chaîne éliminatoire dans une expressions rationnelles - Programmation (C/C++, Delphi, VB, etc.)
Reply
Exprimer une chaîne éliminatoire dans une expressions rationnelles
Thread Tools Display Modes
  #1  
Old 11-11-2005, 22:43
Cougar's Avatar
Cougar Cougar is offline
Membre senior
 
Join Date: 16-09-2001
Location: Orléans
Age: 40
Posts: 3,850
Send a message via MSN to Cougar
je suppose que c'est du php ?
Après une ptite recherche :

Code:
Utilisation de la fonction strpos()

La fonction strpos() permet de connaitre la position de la première occurence d'une chaine contenu dans une autre chaine. Toutefois comme le premier caractère d'une chaine à pour numéro d'ordre 0 et non 1, se pose le problème de la différenciation entre une chaine contenant la chaine recherchée en début (donc la fonction retourne 0) et une chaine ne contenant pas la chaine recherchée. La syntaxe suivante est donc incorrecte.

    $POS=strpos($ChercheDans,$LaChaine,$Apartir_du_Caract._n°);
    if ($POS==0):
           .....
        Endif;

La fonction ne peut renvoyer 0 (valeur généralement utilisée en retour pour signaler un echec) puisque cette valeur 0 correspond justement à la position réelle du 1er caractère. Aussi PHP retourne une chaine de caractère contenant 'false' si la recherche échoue, et une valeur numérique si elle a aboutie (la chaine recherchée est trouvée dans la chaine principale). Pour obtenir un test correct il faut donc tester le type de la valeur retournée avant de poursuivre les traitements :

    $POS=strpos($ChercheDans,$LaChaine,$Apartir_du_Caract._n°);
    if (!is_string($POS)):
           // Cette syntaxe est correcte. On n'entre dans
	// la boucle  que si la valeur retournée
           // est une valeur numérique.
           .....
        Endif;

Une autre astuce, s'il s'agit simplement de vérifier l'existence d'une sous-chaine dans une chaine, donc qu'aucun traitement sur la chaine principale n'est conditionnée par la position de la sous-chaine (comme couper la chaine à partir de la sous-chaine), et que par ailleurs on ne souhaite pas utiliser les fonctions EREG_xxx basées sur les expressions régulières :

    IF (strpos(" ".$ChercheDans,$LaChaine,$Apartir_du_Caract._n°) >0) :
           // Notez l'espace ajouté au début de
	// la chaine. Ainsi sauf si la sous-chaine commence
           // également par un espace, la condition n'est
	// vérifiée effectivement que si la
           // la sous-chaine est trouvée et ce sans avoir
	// tester le type de la valeur renvoyée.
       ...
__________________
Reply With Quote
  #2  
Old 11-11-2005, 23:09
KnuX's Avatar
KnuX KnuX is offline
Membre senior
 
Join Date: 08-12-2002
Age: 40
Posts: 1,117
Non il ne s'agit pas de PHP et en fait je suis restreint à une seule expression régulière. Donc pas de "if" et autres tests avant de retourner le résultat, c'est la regexp qui est décisive :confused:
__________________
http://max.skyrock.com/
Reply With Quote
  #3  
Old 12-11-2005, 01:29
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 40
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
M'exerçant depuis déjà quelque temps au regex, c'est une chose que j'ai moi aussi cherché à faire et pour laquelle je n'ai pas encore trouvé la solution

Si jamais une bonne âme pouvait nous éclairer ...
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -
Reply With Quote
  #4  
Old 12-11-2005, 10:48
Samva's Avatar
Samva Samva is offline
Niaisüre within
 
Join Date: 24-04-2003
Location: Tours
Age: 41
Posts: 2,320
Send a message via ICQ to Samva Send a message via MSN to Samva
J'ai tripatouiller un peu la chose hier soir et j'avoue que je n'ai rien trouvé, je vais continuer à chercher...
__________________
For the End-of-the-World spell, press "Ctrl, Alt, Delete."


Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Cours de français Benjy Discussions sur le site et/ou le forum 47 01-05-2006 14:47
Installation automatisée de Windows 2000 - XP - Server 2003 Werner Articles 241 02-08-2005 15:52
Comparatif des gestionnaires de téléchargement Kaspof Articles 106 27-02-2004 15:03
Bienvenu dans l'aéro... tanis Discussions 2 09-05-2003 10:03
Mise a jour de phpBB nonoleptitmalin Discussions 7 20-02-2003 08:16

All times are GMT +2. The time now is 06:54.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.