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, 23:18
KnuX's Avatar
KnuX KnuX is offline
Membre senior
 
Join Date: 08-12-2002
Age: 38
Posts: 1,117
Exprimer une chaîne éliminatoire dans une expression rationnelle

Salut tout le monde

Cela fait maintenant longtemps que je cherche à faire une expression rationnelle sans succès.

Le principe est relativement simple, je voudrais qu'elle retourne vrai lorsqu'une URL (http://.../) ne contient pas une chaîne tel qu'un domaine précis.

Par exemple, je souhaite exclure le domaine "plouf", dans ce cas :
- http://www.toto.fr/ => vrai
- http://toto.tata.net/ => vrai
- http://www.plouf.tk/ => faux

Je ne trouve pas comment faire... Je sais faire la négation d'un ensemble (le ^ en première position dans une [classe]), mais pas indiquer que je veux 0 occurence de la chaîne "plouf". (plouf){0} ne marche pas, bien entendu

Merci d'avance à celui qui aura une idée de génie :rolleyes:
__________________
http://max.skyrock.com/

Last edited by KnuX; 12-11-2005 at 19:38.
Reply With Quote
  #2  
Old 11-11-2005, 23:43
Cougar's Avatar
Cougar Cougar is offline
Membre senior
 
Join Date: 16-09-2001
Location: Orléans
Age: 39
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
  #3  
Old 12-11-2005, 00:09
KnuX's Avatar
KnuX KnuX is offline
Membre senior
 
Join Date: 08-12-2002
Age: 38
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
  #4  
Old 12-11-2005, 02:29
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
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
  #5  
Old 12-11-2005, 11:48
Samva's Avatar
Samva Samva is offline
Niaisüre within
 
Join Date: 24-04-2003
Location: Tours
Age: 39
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
  #6  
Old 12-11-2005, 16:24
JoE's Avatar
JoE JoE is offline
Mhhhh :)
 
Join Date: 14-10-2003
Posts: 326
Quote:
Originally Posted by KnuX

Merci d'avance à celui qui aura une idée de génie
Heu ça:

^(?:(?!plouf).)*$\r?\n?

J'ai tout bon ?????
Reply With Quote
  #7  
Old 12-11-2005, 18:43
the5thorseman the5thorseman is offline
Membre senior
 
Join Date: 02-11-2004
Posts: 742
Quote:
Originally Posted by JoE
Heu ça:

^(??!plouf).)*$\r?\n?

J'ai tout bon ?????
Pas mieux... j'ai jamais rien compris à tout ces trucs de programmation, bon j'ai jamais appris non plus mais ca donne pas envie d'apprendre ...

(ceci n'est pas un pourrissage de post caché, bon courage dans tes recherches )
__________________


Directeur de cabinet du CDCQRLMALPPDRE
Reply With Quote
  #8  
Old 12-11-2005, 19:37
KnuX's Avatar
KnuX KnuX is offline
Membre senior
 
Join Date: 08-12-2002
Age: 38
Posts: 1,117
Merci JoE, on est sur la bonne voie ;)

"^.*(www.|http://|ftp://)(?:(?!plouf.com).)*$" a l'air d'aller bien qu'il laisse passer des trucs du style "http://www.toto.com/bidule?machin=plouf.com"

En tout cas pour ce que je fais ça va me suffir, si quelqu'un a une optimisation en vue je suis toujours preneur ! :)
__________________
http://max.skyrock.com/
Reply With Quote
  #9  
Old 13-11-2005, 23:58
Cougar's Avatar
Cougar Cougar is offline
Membre senior
 
Join Date: 16-09-2001
Location: Orléans
Age: 39
Posts: 3,850
Send a message via MSN to Cougar
Qui a inventé ce langage de taré ?
__________________
Reply With Quote
  #10  
Old 14-11-2005, 00:10
the5thorseman the5thorseman is offline
Membre senior
 
Join Date: 02-11-2004
Posts: 742
Attendez 5 min... J'ai un gros doute....
...ce que JoE a dit c'était une connerie ou c'était vraiment une réponse au sujet??? :confused::confused::confused:
__________________


Directeur de cabinet du CDCQRLMALPPDRE
Reply With Quote
  #11  
Old 14-11-2005, 00:28
Spycam's Avatar
Spycam Spycam is offline
Spectre de ces lieux
 
Join Date: 25-10-2002
Location: France
Age: 36
Posts: 1,075
Quote:
Originally Posted by Cougar
Qui a inventé ce langage de taré ?
Ca peut vite devenir horrible à partir d'un certain nombre de critères matchés.
Pour l'anecdote, voici ce que peut donner la validation d'une adresse mail en regexp d'après la RFC822
:rolleyes:
Reply With Quote
  #12  
Old 14-11-2005, 00:30
1for-matik's Avatar
1for-matik 1for-matik is offline
W32.Boulet.Worm Eraser
 
Join Date: 05-10-2003
Location: Au Pays de la choucroute
Age: 41
Posts: 3,841
Send a message via ICQ to 1for-matik Send a message via AIM to 1for-matik Send a message via Yahoo to 1for-matik Send a message via Skype™ to 1for-matik
Quote:
Originally Posted by Spycam
Ca peut vite devenir horrible à partir d'un certain nombre de critères matchés.
Pour l'anecdote, voici ce que peut donner la validation d'une adresse mail en regexp d'après la RFC822
:rolleyes:
Ahahahahaha elle est marrante celle là :confused:
__________________
Des problèmes ? Le chat NDFR est disponible. Des problèmes pour y accéder ? Voici le tuto.
Le Best Of "QUOTES" du chan IRC: C'est par ici


Sur n'1fo[r-matik]
: Astuce : Activer le bloqueur de pub/tracking natif sur Firefox

Reply With Quote
  #13  
Old 19-12-2005, 22:46
KnuX's Avatar
KnuX KnuX is offline
Membre senior
 
Join Date: 08-12-2002
Age: 38
Posts: 1,117
En ces vacances de fin d'année, je me remet aux quelques trucs laissés en suspend...

Donc en fait, ce que je veux faire c'est filtrer toute URL n'étant pas celle du domaine autorisé, soit "plouf.com".

Pour le moment j'ai l'expression : "^.*((www.|http://|ftp://)(?:(?!plouf.com).))*$"

Elle me cause néanmoins un soucis, voir cet exemple :
- Code : [regexp "^.*(www.|http://|ftp://)(?:(?!plouf.com).)*$" "www.toto.com www.plouf.com"]
- Valeur retournée : 0

Si une URL contenant mon domaine est en fin de ligne, le résultat du test regexp sera toujours 0 malgré le "www.toto.com" du début...

Qui peut voler à mon secours ? :o
__________________
http://max.skyrock.com/

Last edited by KnuX; 19-12-2005 at 23:10.
Reply With Quote
  #14  
Old 19-12-2005, 23:16
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Est-ce que ceci pourrait aider le sieur KnuX ?

Code:
(www.|http://|ftp://)(?:(?!(plouf.com| )).)+
J'espère avoir bien cerné ce que tu voulais
__________________
- 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
  #15  
Old 19-12-2005, 23:39
KnuX's Avatar
KnuX KnuX is offline
Membre senior
 
Join Date: 08-12-2002
Age: 38
Posts: 1,117
Comme vu sur IRC, non
__________________
http://max.skyrock.com/
Reply With Quote
Reply

Bookmarks


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

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 15:47
Installation automatisée de Windows 2000 - XP - Server 2003 Werner Articles 241 02-08-2005 16:52
Comparatif des gestionnaires de téléchargement Kaspof Articles 106 27-02-2004 16:03
Bienvenu dans l'aéro... tanis Discussions 2 09-05-2003 11:03
Mise a jour de phpBB nonoleptitmalin Discussions 7 20-02-2003 09:16

All times are GMT +2. The time now is 13:02.

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