Celle-ci est celle qui construit le feed TND(FR) que je décris dans ce billet. Prenons un peu de temps pour la décortiquer.
L'expression est donc la suivante :
(^|\s|\b|#)(ritaline|concerta|tda(h)?|tsa|autisme|
autistique(s)?|bipolaire(s)?|autiste(s)?|tnd
neurodéveloppement(aux)?|synesthésie|méthylphénidate|
hyperactivité|hyperacti(f|ve)(s)?|asperger|trouble de l'attention|
trouble déficit de l'attention)($|\s|\b)
Note : Elle diffère en effet de celle de l'illustration, puisque je me suis rendu compte d'erreurs et l'ai corrigée.
On peut ici la séparer en trois éléments distincts, chacun entre parenthèses (pour prioriser et regrouper, comme en mathématiques). Le premier est (^|\s|\b|#)
. Il correspond au début de l'expression recherchée, et contient plusieurs éléments intéressants.
^
indique qu'il s'agit d'un début de ligne\s
indique un espace ou une tabulation\b
indique la position de début ou de fin de mot#
n'est ici que le caractère # lui-même, utilisé pour les hashtags sur la plupart des réseaux sociaux (coucou Threads)|
est quant à lui un simple OU qui sépare deux éléments
Ce bloc peut donc être lu comme : Un début de ligne OU un espace ou une tabulation OU un début ou une fin de mot OU le caractère #. Et c'est exactement ce que nous recherchons. Nous voulons que l'expression qui sera détectée commence (étant donné que c'est le premier bloc) par un début de ligne OU un espace ou une tabulation OU un début ou une fin de mot OU le caractère #.
Ceci empêche par exemple de chercher le mot vent
sans variation, et d'avoir en retour éventuel
qui contient bien vent
mais n'est pas l'expression souhaitée, puisqu'il ne commence pas par vent
.
Le second bloc est le plus long : (ritaline|concerta|tda(h)?|tsa|autisme|autistique(s)?|bipolaire(s)?|autiste(s)?|tnd|neurodéveloppement(aux)?|synesthésie|méthylphénidate|hyperactivité|hyperacti(f|ve)(s)?|asperger|trouble de l'attention|trouble déficit de l'attention)
On définit ici l'ensemble des termes que nous voulons sélectionner avec notre expression régulière, tous séparés par un |
qui veut dire OU. Nous voulons donc retenir les termes ritaline OU concerta OU autisme OU tsa, etc.
Une spécificité ici est que certains mots sont regroupés en quelques caractères. Par exemple, pour regrouper à la fois hyperactif
, hyperactive
, hyperactifs
et hyperactives
, j'ai utilisé hyperacti(f|ve)(s)?
. Attardons-nous là-dessus. Nous avons ici, à nouveau, trois bloc :
hyperacti
est le début du mot que nous cherchons, juste après les critères du premier bloc vu plus haut(f|ve)
indique qu'après le début du mot, nous voulons le masculin (f) OU le féminin (ve)(s)?
permet d'inclure le pluriel - ici le s- tout en le rendant facultatif, ce que permet le point d'interrogation
Ainsi, nous devons avoir un mot qui commence par hyperacti
, suivi du masculin f
ou ve
. Ces points sont obligatoires. Nous pouvons aussi avoir le pluriel s
à la fin, mais le mot sera retenu même s'il ne contient pas le s, et ce grâce au ?
.
Enfin, le dernier bloc est à l'image du premier, et indique ce que nous devons rencontrer à la fin de notre expression recherché : ($|\s|\b)
$
indique une fin de ligne\s
indique un espace ou une tabulation\b
indique un début ou une fin de mot
Là encore, directement après les termes que nous voulons rechercher, nous devons avoir une fin de ligne OU un espace ou une tabulation OU un début ou une fin de mot. Pour reprendre le même exemple que pour le premier bloc, ceci empêche que soit retenu venteux
alors que nous ne voulons que le mot vent
.
Voilà, j'espère qu'avec ce court billet vous aurez de quoi construire quelques petites expressions régulières, et pourquoi pas construire un feed BlueSky ;) Moi je les construis avec SkyFeed
Pour une liste plus exhaustive des différents opérateurs d'expressions régulières, je ne peux que vous renvoyer à la page wikipedia correspondante.