Petit moteur de recherche par mot(s) clé(s)

4/5 (7 avis)

Vue 31 274 fois - Téléchargée 532 fois

Description

Voici un petit code source sympa.

Il vérifie l'existence de mot(s) clé(s) que vous aurez saisi dans une chaîne de caractères et retourne la même chaîne de caractère avec les mot(s) clé(s) mis en valeur (ils seront soulignés et en italique).

NB : Dans mon exemple les mots clés doivent être séparés par des virgules.

Je vous mets à disposition le fichier Zip !

Source / Exemple :


<cfparam name="form.critere" default="va, Ceci, est">
<cfparam name="form.chaine" default="Ceci est la chaîne de caractères qui va servir de test">

<cfset ListeCritere = "#form.critere#">
<cfset chaine = "#form.chaine#">
<cfset newchaine = chaine>

<cfloop index="indice" list="#ListeCritere#" delimiters=",">	
     <cfset critere = "#indice#">
     <cfset newpos = 1>
	
     <cfif Len(newchaine) is not 0>
	<cfset  chaine = newchaine>	
     </cfif>
	
     <cfset PosCritere = FindNoCase(#critere#, #chaine#,#newpos#)>
	
     <cfif PosCritere GT 0>
	<cfset newchaine =''>	
     </cfif>

     <cfloop CONDITION = "(#PosCritere# GT 0)">
          <cfset newchaine = newchaine & #Mid(chaine,newpos,PosCritere-newpos)# 
               & "<i><u>" & #Mid(chaine,PosCritere,len(critere))# & "</u></i>">
          <cfset newpos = Poscritere + len(critere)>
	
          <cfif PosCritere GT 0>
	<cfset AntPosCritere = PosCritere>
           </cfif>
		
           <cfset PosCritere = FindNoCase(#critere#, #chaine#,PosCritere+1)>

           <cfif PosCritere IS 0>
	<cfif PosCritere LT len(critere)>
	     <cfset newchaine = newchaine & #Mid(chaine,AntPosCritere + len(critere),len
                            (chaine))#>
	</cfif>			
            </cfif>
     </cfloop>
</cfloop>
<br><br>
La chaine retournée est : <cfoutput>#newchaine#</cfoutput>

Conclusion :


Bon si vous avez des soucis avec le code, tenez moi au courant.

Par contre si vous avez des suggestions ou corrections à apporter à mon code, n'hesitez pas, je suis à votre écoute...

Bon courage

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_carresse
Messages postés
1
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
27 juillet 2006
-
merci
cs_Skyride
Messages postés
36
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
18 décembre 2002
-
Merci Bastoun pour ton aide concernant la manipulation des expressions régulières...

A+

SkyRide
cs_bastoun
Messages postés
164
Date d'inscription
dimanche 1 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2007
1 -
<cfset newChaine=REReplaceNoCase( form.chaine, "(#ListChangeDelims(form.critere, '|' )#)", "\1" , "ALL" ) >

Là, c mieux... donc c'est double backslashs pour insérer un backslah...
cs_bastoun
Messages postés
164
Date d'inscription
dimanche 1 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2007
1 -
bon.. encore raté... lisez backslash au lieu de slash avant tous les chiffres où il y a un slash ( / )

\ et là les backslashs sont passés ???
cs_bastoun
Messages postés
164
Date d'inscription
dimanche 1 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2007
1 -
Bon je recommence.. les backslashs ne sont pas passés... petit conseil n'oubliez pas de mettre un slash avant tout backslash avant insertion d'un code sinon ça ne passe pas ;-)

<cfparam name="form.critere" default="va, Ceci, est">
<cfparam name="form.chaine" default="Ceci est la chaîne de caractères qui va servir de test">

<cfset newChaine=REReplaceNoCase( form.chaine, "(#ListChangeDelims(form.critere, '|' )#)", "/1" , "ALL" ) >

<cfoutput>#newChaine#</cfoutput>

Petites Explications :
Le premier argument de la fonction Rereplace est la chaine dans laquelle on recherche les expressions
Le deuxième contient les expressions recherchées
Le troisième indique par quoi remplacer l'expression trouvée
Le quatrieme est la portée ("ALL" pour toutes les occurences, "ONE" pour une seule)

Explication de l'expression recherché :
les () indiquent que l'on va rechercher un suite de caractères, et nous permet d'utiliser les backreferences.
le #ListChangeDelims(form.critere, '|' )# sert juste à transformer la chaine "va, Ceci, est" en "va| Ceci| est" , le | signifiant OU dans les regexp...
cela nous permet donc de rechercher les trois expressions en une seule opération

Le /1 (contenu dans ce qui doit remplacer la chaine trouvée) est une backreference, permettant de récupérer la chaine trouvée dans l'expression de recherche et contenue dans le premier bloc de parenthèse (ça tombe bien ici il n'y en a qu'un, si il y avait plusieurs blocs de parenthèses à la suite on pourrait utiliser /2 pour le deuxième, /3 pour le troisième etc)

Voilà, pour toute remarque, n'hésitez pas...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.