Voici pour ceux que ça peut intéresser, voici la méthode rapide que j'ai mis au point pour mon programme, pour effectuer la recherche de texte sans tenir compte ni des majuscules, ni des accents. (Il en existe sûrement des mieux, mais j'aime réinventer la roue)
Je ne traite ici que les 16 caractères accentués de la langue française, donc à adapter au besoin.
Le pseudo code est très simple:
- Lire la chaine à trouver lettre par lettre
- Si une lettre correspond à un motif, on la remplace par le motif (ex: "a" => "[aàâä]")
- Sinon on la laisse sans modification
- L'expression régulière est créée avec la nouvelle chaine (elle ignore les majuscules/minuscules)
- Si au moins un terme est trouvé, on quitte
Le code est volontairement explicite:
[aàâä] = Lettre "normale" suivi des déclinaisons.
La ligne ExtractRegularExpression(0, Txt$, Resultat$()) ici ne sert ici que comme affichage de Debug, car dans mon application, je me contente de surligner les branches du TreeGadget dont le titre ou le texte contient le terme cherché.
(Le texte exemple ci-dessous est celui de l'aide de la page sur les expressions régulières)
Code : Tout sélectionner
Txt$ = "Les expressions régulières permettent de rechercher, extraire ou remplacer n'importe quel texte " +
"dans une chaîne de caractères qui correspond à un motif (pattern) donné. " +
"Ces motifs sont souvent assez difficiles à écrire et à appréhender, " +
"mais quand ils sont correctement utilisés ils rendent beaucoup de manipulations autour des chaînes " +
"de caractères plus aisées. De fait, cette bibliothèque n'est pas pour les néophytes et il est " +
"conseillé d'avoir de solides bases en PureBasic et en programmation en général pour l'utiliser. "
Terme$ = "chaine"
a$ = "[aàâä]"
c$ = "[cç]"
e$ = "[eéèêë]"
i$ = "[iîï]"
o$ = "[oôö]"
u$ = "[uùûü]"
y$ = "[yÿ]"
For i = 1 To Len(Terme$)
Lettre$ = Mid(Terme$, i, 1)
Select Lettre$
Case "a"
RegEx$ + a$
Case "c"
RegEx$ + c$
Case "e"
RegEx$ + e$
Case "i"
RegEx$ + i$
Case "o"
RegEx$ + o$
Case "u"
RegEx$ + u$
Case "y"
RegEx$ + y$
Case "i"
RegEx$ + i$
Default
RegEx$ + Lettre$
EndSelect
Next
Debug "Cherche: " + Terme$
Debug "RegEx : " + RegEx$
CreateRegularExpression(0, RegEx$, #PB_RegularExpression_NoCase)
; Une seule occurence suffit
If MatchRegularExpression(0, Txt$)
; --- Ici je met en surbrillance la branche de mon TreeGadGet
; --- SetGadgetItemColor(#Tree_0, ID_Note, #PB_Gadget_BackColor, $00FFFF)
; --- Ceci, ci-dessous sert juste ici à afficher le résultat de l'exemple
Debug "Au moins une occurence a été trouvée."
Dim Resultat$(0)
ExtractRegularExpression(0, Txt$, Resultat$())
Debug "Première correspondance trouvée: [" + Resultat$(0) + "]"
Else
Debug "Aucune occurence trouvée."
EndIf
FreeRegularExpression(0)
End
PS. Mon programme TreeNote cafouille si on déplace une branche contenant des sous-branches. C'est la prochaine étape.