Techniques de recherche avancées
<lgrobol@parisnanterre.fr>
Université Paris Nanterre
Permet de faire des requêtes dans Google Books :
Exemple : « vélocipède » vs « vélo » vs « bicyclette »
→ L’évolution des fréquences relatives des n-grammes dans le corpus
« the United States are » ou « the United States is »
*Le token * : remplace n’import quel mot.
Exemple : une colère * donne les fréquences de trigrammes dont les deux premiers mots sont « une » et « colère »
clg.txtDans le CLG, combien de fois apparaissent les mots :
languephonèmeeuropéenneEst-ce que vous remarquez quelque chose ?
Expressions régulières = ER = RegEx
.*) et « respecter la casse » (ou Aa)France 2 vous donne France 2, mais pas France2 ni France 3Aa) madeleine match madeleine, mais pas MadeleineIls portent sur l’élément qui précède et indiquent une répétition
| Quantificateur | ? |
* |
+ |
|---|---|---|---|
| Signification | « 0 ou 1 fois » | « 0 ou plusieurs fois » | « 1 ou plusieurs fois » |
pl?eur matche peur et pleurcoup?s matche cous et coups, mais pas coupajoli*e matche jole, jolie, joliie, joliiie…jolie+ matche jolie, joliee, jolieee…Exercice : à quelles chaînes de caractères correspondent les expressions suivantes ?
a?typiquepomm?eslo*lloo*llol+(Tester vos réponses dans un éditeur)
| Caractère | Sens | Exemple |
|---|---|---|
. |
n’importe quel caractère | p.re : pare, p1re, père, p)re,… |
^ |
début de ligne | ^Je |
$ |
fin de ligne | informatique$ |
\n |
saut de ligne | a\nb |
\t |
tabulation | a\tu |
Exercices : à quoi correspondent ces expressions ?
Nom\tPrénomcap$br.n^capcap-\npableOn a vu un certain nombre de métacaractères (les caractères avec une signification spéciale).
Pour les matcher littéralement (les « déspécialiser »), il faut les faire précéder d’un anti-slash \ :
3\.0 matche 3.0, mais pas 310price: \$5 : matche price: $5^, [, ], (, ), *, +, ?, {, }Et pour représenter un anti-slash ? Pareil
machin\\truc matche machin\trucLa barre droite | indique une alternative :
machin|truc matche machin et truc.je|tu|nous matche je, tu et nous.On les utilise le plus souvent avec des parenthèses pour contrôler leur portée
(m|r)aison matche maison et raison.(il|elle|iel)s? matche il, elle, iel et leurs versions plurielles.Les crochets indiquent un ensemble de caractères à matcher :
[abc] matche un caractère qui est soit a, soit b, soit c[a-r] matche les lettres de a à r[a-z] matche les lettres de l’alphabet en minuscules[a-zA-Z] matche aussi les majuscules*Exercice :
Que matchent :
[ab][ab][MmRr]aisonÉcrire une expression régulière qui matche exclusivement :
moi, toi et soi.ci, si, ce et se.(Tester vos réponses dans un éditeur)
Avec un circonflexe au début : négation de l’ensemble
[^abc] matche tout sauf a, b et c[^0-9] matche tout sauf des chiffres[^A-Z] matche tout sauf des majuscules sans diacritiquesOn peut les combiner avec les quantificateurs :
[aeiouy]+ matche une suite de voyelles : a, aa, ae, iey…[^abc]* matche une suite de caractères différents de a, b et c.Les parenthèses permettent de construire des groupes
(ab)+ matche une suite de ab : ab, abab, ababab…([ab]c)+ matche ac, bc, acac, acbc, bcac…([aeiouy][^aeiouy])+ matche une suite de couples voyelle/non-voyelle.Exercice : que matchent les expressions suivantes ?
vert(es)?(anti|pro)nucléaireWiki[a-z]+Wiki[a-z]*Dans le fichier clg.txt, combien trouvez-vous de matchs pour chacun des expressions régulières suivantes ? Que signifient-elles ?
.évolution.[a-zA-Z]évolution[^rR]évolutionLes accolades indiquent un intervalle de répétitions :
lo{1,3}ng matche long, loong et looonglo{3,} matche looong, loooong, etc.lo{3}ng ne matche que looongExercice : écrire une expression régulière qui reconnaît exclusivement lool, loool et looool.
| Classe | Signification | Équivalent ASCII |
|---|---|---|
\d |
un chiffre | [0-9] |
\D |
tout sauf un chiffre | [^0-9] |
\s |
une espace | espace, \t, \n… |
\S |
tout sauf une espace | … |
\b |
frontière de mot (début ou fin de mot) | \bjour : journée mais pas ajouré |
Notes :
\X reconnaît le contraire de \x| Classe | Signification |
|---|---|
\p{L} |
une lettre |
\P{L} |
tout sauf une lettre |
\p{P} |
Une ponctuation |
\P{P} |
tout sauf une ponctuation |
\p{Lu} |
une lettre majuscule |
\p{Ll} |
une lettre minuscule |
Voir les détails sur MDN et la liste des propriétés du type « catégories générales » (≈ classes de caractères) du consortium Unicode.
Dans `clg.txt, combien y-a-t-il de mots :
er en fin de ligne ?er ?r ?r ?a et finissant par er ?Faire le tutoriel et les 5 premiers puzzles de https://regexcrossword.com
Au tableau ! Voir aussi https://cyberzhg.github.io/toolbox/nfa2dfa
? après un quantificateur, on le rend lazy : il matche le minimum de caractères.Par exemple, si l’entrée est AHHHHHHHHH :
AH+ matche la plus longue suite de caractères : AHHHHHHHHHAH+? matche la plus petite suite de caractères : AHOn peut utiliser des références numérotées pour rappeler le contenu d’un groupe :
(spam|egg), sausage and \1 reconnaît :
spam, sausage and spamegg, sausage and eggegg, sausage and spamFaire les niveaux suivants sur https://alf.nu/RegexGolf