Caractère littéral : Un symbole ou une lettre dans une expression régulière qui correspond exactement à ce caractère dans le texte. Exemple : /a/ correspond à la lettre "a".
Caractère spécial : Un symbole ayant une signification particulière en regex (ex : ., *, +, ?, \d, \w). Pour le faire correspondre littéralement, il doit être échappé avec un antislash \.
Échappement (\) : Technique pour indiquer que le caractère suivant doit être interprété comme un caractère littéral, même s'il est normalement spécial. Exemple : /\./ pour faire correspondre un point littéral.
Classe de caractères [ ] : Définissent un ensemble de caractères possibles. Exemple : [abc] correspond à "a", "b" ou "c". Les intervalles [a-z] ou [0-9] permettent de représenter une plage de caractères.
Caractère d’échappement dans une classe [ ] : Certains caractères spéciaux comme -, ^, ] doivent être échappés ou placés à des positions spécifiques pour être interprétés littéralement.
Quantificateurs { } : Indiquent le nombre de répétitions d’un caractère ou groupe. Exemple : \d{3} pour exactement 3 chiffres.
Les caractères littéraux sont la base des expressions régulières : ils permettent de rechercher une correspondance exacte avec un caractère précis dans le texte.
Les caractères spéciaux doivent être échappés (\) pour être traités comme des caractères normaux, sinon ils ont une fonction particulière (ex : . pour n’importe quel caractère).
La syntaxe [ ] permet de créer des classes de caractères pour définir des ensembles précis ou des plages, facilitant la recherche de plusieurs caractères.
Les intervalles [a-z] ou [0-9] sont inclusifs, c’est-à-dire qu’ils incluent les deux bornes.
La combinaison de classes et de quantificateurs permet de définir des motifs complexes et précis.
La méthode test() permet de vérifier si une expression régulière correspond à une chaîne donnée.
Les caractères littéraux et leur échappement sont fondamentaux pour construire des expressions régulières précises. La maîtrise des classes de caractères [ ], des intervalles [a-z], et des quantificateurs { } permet de créer des motifs puissants pour la recherche et la validation de textes.
Caractères littéraux : caractères simples dans une expression régulière, correspondant exactement à eux-mêmes, ex : /abc/ correspond à la chaîne "abc".
Classes prédéfinies : raccourcis pour représenter des ensembles de caractères courants :
\d : chiffre (0-9)\D : tout caractère sauf un chiffre\w : caractère de mot (lettres, chiffres, underscore)\W : tout caractère non de mot\s : espace blanc (espace, tabulation, saut de ligne)\S : tout caractère non espace blancCaractère point (.) : correspond à tout caractère sauf saut de ligne (\n), sauf si le marqueur s est activé pour inclure les sauts de ligne.
Échappement (\) : permet d'utiliser des caractères spéciaux comme caractères littéraux, par exemple \. pour un point.
Classes personnalisées ([ ]) : délimitent un ensemble de caractères à faire correspondre, par exemple [a-z0-9]. L'inverse est [ ^ ] pour exclure certains caractères.
\d et \D sont très utilisés pour valider ou rechercher des chiffres ou leur absence.\w inclut lettres, chiffres et underscore, mais pas les caractères accentués ou spéciaux non anglais.\W est l'inverse de \w, utile pour exclure les caractères de mot.\s couvre tous les espaces blancs, y compris tabulations et sauts de ligne, tandis que \S couvre tous les autres caractères..) doit être échappé (\.) pour rechercher un point littéral.[ ] permettent de définir précisément quels caractères faire correspondre ou exclure.Les classes prédéfinies simplifient la création d'expressions régulières en regroupant des ensembles de caractères courants, mais leur comportement peut varier selon le contexte (ex : \w ne couvre pas tous les caractères accentués). Il est essentiel de connaître leur signification pour construire des regex efficaces et précis.
Caractères littéraux : Caractères simples qui correspondent exactement à eux-mêmes dans une expression régulière, comme 'a', 'b', ou '1'.
Classes prédéfinies :
\d : correspond à tout chiffre de 0 à 9.\D : correspond à tout caractère qui n'est pas un chiffre.\w : correspond à tout caractère alphanumérique (lettres, chiffres, underscore).\W : correspond à tout caractère non alphanumérique.\s : correspond à tout espace blanc (espace, tabulation, saut de ligne).\S : correspond à tout caractère non espace blanc.Crochets [ ] : Définissent une classe de caractères spécifiques. Par exemple, [a1;] correspond à un seul caractère parmi 'a', '1' ou ';'.
[^ ] : classe négative, correspond à tout caractère sauf ceux listés.[a-z] : intervalle de caractères, ici toutes les lettres minuscules.Quantificateurs :
{n} : exactement n répétitions.{n,m} : entre n et m répétitions.+ : une ou plusieurs répétitions.* : zéro ou plusieurs répétitions.? : zéro ou une répétition, rend un caractère ou groupe optionnel.Alternatives | : OU logique entre plusieurs options, par exemple (a|b|c).
Ancres :
^ : début de ligne ou de texte.$ : fin de ligne ou de texte.\b : limite de mot (début ou fin d’un mot).Groupes () : Capturent une partie de l’expression pour la réutiliser ou extraire.
(?<nom>) : permettent d’accéder directement à la partie capturée via un nom.Lookaround :
(?=...) : positive assertion, vérifie la présence d’une expression après.(?!...) : negative assertion, vérifie l’absence d’une expression après.(?<=...) : assertion positive avant.(?<!...) : assertion négative avant.Marqueurs :
g : recherche globale.i : insensible à la casse.m : mode multilignes.u : mode Unicode.s : dotAll, le . inclut les sauts de ligne.y : recherche à partir de la position lastIndex.\ pour représenter leur caractère littéral (ex : \. pour un point).^ et $ permettent de cibler le début ou la fin d’un texte ou d’une ligne.Les classes de caractères et les quantificateurs offrent une flexibilité extrême pour définir précisément des motifs dans une expression régulière, rendant leur maîtrise essentielle pour analyser, valider ou transformer du texte efficacement.
Caractères littéraux : Caractères simples qui correspondent exactement à eux-mêmes dans une expression régulière. Exemple : /abc/ correspond à la chaîne "abc".
Classes prédéfinies :
\d : Correspond à n'importe quel chiffre entre 0 et 9.\D : Correspond à tout caractère qui n'est pas un chiffre.\w : Correspond à tout caractère alphanumérique (lettres, chiffres, underscore).\W : Correspond à tout caractère non alphanumérique.\s : Correspond à tout espace blanc (espace, tabulation, saut de ligne).\S : Correspond à tout caractère non espace blanc.Caractère point (.) : Correspond à tout caractère sauf les sauts de ligne. Pour faire correspondre un point littéral, il faut l’échapper (\.).
Construction de classes ([ ]) : Permet de définir un ensemble précis de caractères. Exemple : [a-z] pour toutes les lettres minuscules.
Inversion de classes ([^ ]) : Correspond à tous les caractères sauf ceux spécifiés. Exemple : [^a-z].
Intervalles ([ - ]) : Permettent de faire correspondre tous les caractères entre deux limites. Exemple : [0-9] ou [A-Z].
Quantificateurs :
{n} : Exactement n répétitions.{n,} : Au moins n répétitions.{n,m} : Entre n et m répétitions.+ : 1 ou plus répétitions.* : 0 ou plus répétitions.? : 0 ou 1 répétition (optionnel).Alternatives (|) : OU logique pour faire correspondre plusieurs options. Exemple : a|b correspond à "a" ou "b".
Ancres :
^ : Début de la ligne ou du texte.$ : Fin de la ligne ou du texte.\b : Limite de mot (début ou fin d’un mot).Groupes :
( ) pour extraire une partie du texte.(?: ) pour grouper sans capturer.(?<nom> ) pour accéder par nom.Lookaround :
(?= )) : Vérifie la présence d’une expression après.(?! )) : Vérifie l’absence d’une expression après.(?<= )) : Vérifie la présence d’une expression avant.(?<! )) : Vérifie l’absence d’une expression avant.Marqueurs :
g : Recherche globale.i : Insensible à la casse.m : Multiligne.u : Active l’Unicode.s : DotAll, . inclut les sauts de ligne.y : Recherche à la position lastIndex.\d, \w, \s) facilitent la création d’expressions pour des caractères spécifiques.[ ] permet de définir précisément quels caractères doivent correspondre, avec possibilité d’inversion [^ ].{ }, +, *, ? contrôlent la répétition des caractères ou groupes.| permettent de tester plusieurs options dans une même expression.^ et $ fixent le début et la fin du texte ou d’une ligne en mode multiligne.( ) permettent d’extraire des sous-chaînes ou de structurer l’expression.?=, ?!, ?<=, ?<!) permettent de vérifier la présence ou l’absence d’un motif avant ou après une position donnée.Les classes d'espaces et caractères prédéfinis en expression régulière offrent une syntaxe puissante et concise pour définir précisément des motifs de recherche, tout en permettant une grande flexibilité grâce aux quantificateurs, groupes, et assertions.
Caractères littéraux : caractères simples qui correspondent exactement à eux-mêmes dans une expression régulière. Exemple : /abc/ correspond à la chaîne "abc".
Classes prédéfinies :
\d : correspond à n'importe quel chiffre entre 0 et 9.\D : correspond à tout caractère qui n'est pas un chiffre.\w : correspond à tout caractère alphanumérique (lettres, chiffres, underscore).\W : correspond à tout caractère non alphanumérique.\s : correspond à tout espace (espace, tabulation, saut de ligne).\S : correspond à tout caractère non espace.Construction de classes avec [ ] : permet de définir un ensemble précis de caractères. Exemple : [a1;] correspond à un seul caractère parmi a, 1 ou ;.
Inversion avec [^ ] : correspond à tout caractère sauf ceux spécifiés. Exemple : [^a1;].
Intervalles [ - ] : permettent de faire correspondre une gamme de caractères. Exemple : [c-g] correspond à c, d, e, f, g.
Raccourcis dans les classes :
[0-9] équivaut à \d.[a-zA-Z0-9_] équivaut à \w.[^\d] équivaut à \D.[ ] permet de définir des ensembles spécifiques ou des plages de caractères.^ à l'intérieur d'une classe [ ^ ] inverse la sélection, excluant certains caractères.[a-z] ou [0-9] sont inclusifs, couvrant tous les caractères entre les limites.\d, \w, \s sont équivalents à des classes précises, mais leur utilisation dans des classes est souvent plus concise.Les classes de caractères permettent de construire rapidement des motifs précis en regroupant ou excluant des caractères, avec une syntaxe simple et efficace pour couvrir une large gamme de cas en expression régulière.
? pour correspondre au minimum de caractères.{n} pour une répétition exacte, {min, max} pour une plage.+, *, ? simplifient l’écriture des quantificateurs.( ) sont essentiels pour extraire ou manipuler des parties spécifiques d’une correspondance.^ et $ permettent de cibler le début ou la fin d’un texte ou d’une ligne, surtout avec le mode multiligne (m).Les quantificateurs en regex offrent une grande flexibilité pour définir la répétition de motifs, et leur maîtrise permet d’écrire des expressions précises, efficaces et adaptées à des besoins complexes de validation ou d’extraction.
Caractères littéraux : caractères simples qui correspondent exactement à eux-mêmes dans une expression régulière. Exemple : /abc/ correspond à la chaîne "abc".
Classes prédéfinies :
\d : correspond à n'importe quel chiffre (0-9).\D : correspond à tout caractère qui n'est pas un chiffre.\w : correspond à tout caractère alphanumérique (lettres, chiffres, underscore).\W : correspond à tout caractère non alphanumérique.\s : correspond à tout espace blanc (espace, tabulation, saut de ligne).\S : correspond à tout caractère non espace blanc.Classes personnalisées [ ] :
[a-z] : correspond à une lettre minuscule.[^a-z] : correspond à tout caractère sauf une lettre minuscule.[0-9] : correspond à un chiffre.[a-zA-Z0-9_] : équivalent à \w.Quantificateurs :
{n} : exactement n répétitions.{n,} : n ou plus répétitions.{n,m} : entre n et m répétitions.+ : une ou plusieurs répétitions ({1,}).* : zéro ou plusieurs ({0,}).? : zéro ou une répétition, ou caractère optionnel.Alternatives | :
(option1|option2).Groupes :
() : groupe capturant, pour extraire ou manipuler une partie du texte.(?: ) : groupe non capturant, pour grouper sans capturer.Ancres :
^ : début de ligne ou de texte.$ : fin de ligne ou de texte.\b : limite de mot (début ou fin d’un mot).Lookaround :
(?=...) : positive lookahead, vérifie une condition suivante sans la consommer.(?!...) : negative lookahead, vérifie l'absence d'une condition suivante.(?<=...) : positive lookbehind, vérifie une condition précédente.(?<!...) : negative lookbehind, vérifie l'absence d'une condition précédente.\ pour correspondre littéralement (ex : \. pour un point).| permettent de choisir entre plusieurs motifs.^ et $ délimitent le début et la fin d’un texte ou d’une ligne.Les groupes, alternatives, quantificateurs et assertions offrent une puissance exceptionnelle pour construire des expressions régulières précises et efficaces, permettant de manipuler et valider des textes complexes avec une seule ligne de code.
Caractères littéraux : caractères simples qui correspondent exactement à eux-mêmes dans une expression régulière. Exemple : /abc/ correspond à la chaîne "abc".
Classes prédéfinies :
\d : correspond à n'importe quel chiffre (0-9).\D : correspond à tout caractère qui n'est pas un chiffre.\w : correspond à tout caractère alphanumérique (lettres, chiffres, underscore).\W : correspond à tout caractère non alphanumérique.\s : correspond à tout espace (espace, tabulation, saut de ligne).\S : correspond à tout caractère non espace.Classes personnalisées : délimitées par [ ], permettent de définir un ensemble précis de caractères. Exemple : [a-z] pour toutes les lettres minuscules.
Quantificateurs :
{n} : exactement n répétitions.{n,} : au moins n répétitions.{n,m} : entre n et m répétitions.+ : une ou plusieurs répétitions.* : zéro ou plusieurs répétitions.? : zéro ou une répétition (optionnel).Alternatives : | permet de choisir entre plusieurs options. Exemple : /a|b/ correspond à "a" ou "b".
Ancres :
^ : début de ligne ou début de texte.$ : fin de ligne ou fin de texte.\b : limite de mot (début ou fin d’un mot).Groupes :
( ) : capturent pour extraire des parties du texte.(?: ) : groupes non capturants, pour grouper sans capturer.Lookaround :
(?= ) : positive assertion (regarde en avant).(?! ) : negative assertion (regarde en avant, négatif).(?<= ) : positive assertion en arrière.(?<! ) : negative assertion en arrière.Marqueurs :
g : recherche globale.i : insensible à la casse.m : mode multiline.s : dotAll, . inclut les sauts de ligne.u : mode Unicode.[ ] offrent une flexibilité pour définir des ensembles spécifiques.^ et $ permettent de cibler le début ou la fin d’un texte ou d’une ligne.( ) permettent d’extraire des sous-parties de la correspondance, avec la possibilité de nommer ces groupes.Les ancres, classes, quantificateurs et groupes constituent la base pour maîtriser la construction d'expressions régulières précises et puissantes, permettant de rechercher, valider ou extraire efficacement des données dans un texte.
Groupe capturant () : Séquence de caractères délimitée par des parenthèses, permettant d'extraire une partie du texte correspondant à l'expression régulière. Exemple : (abc) capture "abc".
Groupe non capturant (?: ) : Groupe qui délimite une alternative ou une partie de l'expression sans capturer le contenu pour la récupération ultérieure. Syntaxe : (?:...).
Groupe nommé (?<nom> ) : Groupe capturant associé à un nom, accessible via la propriété groups après la correspondance. Exemple : (?<jour>\d{2}).
Référence à un groupe capturé $n ou $<nom> : Utilisée dans la substitution avec replace() pour réinsérer le contenu capturé. $1, $2, ou $<nom>.
Groupe imbriqué : Groupe à l'intérieur d'un autre groupe, permettant d'extraire plusieurs niveaux d'informations. Exemple : (?<date>(?<jour>\d{2})\/(?<mois>\d{2})\/(?<annee>\d{4})).
Les groupes capturants ( ) permettent d'extraire des sous-parties du texte pour traitement ou récupération.
Les groupes non capturants (?: ) sont utilisés pour structurer l'expression sans capturer, évitant ainsi de polluer la liste des groupes.
Les groupes nommés (?<nom> ) facilitent l'accès aux sous-groupes par nom, rendant le code plus lisible et maintenable.
La méthode match() retourne un tableau où chaque groupe capturé est accessible par son index ou son nom via la propriété groups.
Les références $n et $<nom> dans replace() permettent de réutiliser les parties capturées dans la chaîne de substitution.
La capacité d'imbriquer des groupes permet d'extraire plusieurs informations structurées dans une seule expression.
Les groupes capturants et nommés enrichissent considérablement la puissance des expressions régulières, permettant d'extraire, manipuler et structurer efficacement des données complexes à partir de textes.
Lookahead positif (?=) : Vérifie qu'une certaine expression apparaît après la position courante sans l'inclure dans la correspondance. Exemple : /\d+(?=%)/ trouve un nombre suivi d’un pourcentage sans le capturer.
Lookahead négatif (?! ) : Vérifie qu'une expression n'apparaît pas après la position courante. Exemple : /(?<!\$)\d{3}/ assure qu’un nombre de trois chiffres n’est pas précédé d’un symbole dollar.
Lookbehind positif (?<=) : Vérifie qu'une expression précède immédiatement la position courante, sans l'inclure dans la correspondance. Exemple : /(?<=\$)\d+/ capture un nombre précédé d’un symbole dollar.
Lookbehind négatif (?<! ) : Vérifie qu’une expression n’apparaît pas immédiatement avant la position courante. Exemple : /(?<!\$)\d{3}/ pour un nombre de trois chiffres non précédé d’un dollar.
Assertion d’ancrage ^ et $ : Marquent respectivement le début et la fin d’une ligne ou d’un texte, souvent combinés avec le mode m (multiligne) pour gérer plusieurs lignes.
Groupe de capture () : Permet d’extraire une partie du texte correspondant à une sous-expression, accessible via la méthode match() ou exec().
Les assertions lookaround permettent de vérifier la présence ou l’absence d’un motif avant ou après une position donnée, sans l’inclure dans la correspondance finale.
Elles sont très utiles pour valider des formats complexes, comme des mots de passe, des URLs ou des formats de dates, en imposant des conditions contextuelles.
Les assertions de début et fin de ligne (^, $) peuvent être modifiées en mode multiligne (m) pour gérer plusieurs lignes dans un même texte.
Les groupes capturants ( ) et non capturants (?: ) permettent d’organiser les alternatives et de capturer des sous-parties pour traitement ultérieur.
La syntaxe des assertions lookaround est puissante mais doit être utilisée avec précaution pour éviter des correspondances inattendues ou des performances dégradées.
Les assertions lookaround offrent une capacité unique de vérifier des conditions contextuelles dans une expression régulière, permettant de faire des recherches précises sans inclure ces conditions dans la correspondance elle-même.
Caractères littéraux : caractères simples dans une expression régulière, correspondant exactement à eux-mêmes. Exemple : /a/ correspond au caractère 'a'.
Classes prédéfinies : ensembles de caractères prédéfinis pour simplifier la correspondance. Exemples :
\d : chiffre (0-9)\D : non-chiffre\w : caractères alphanumériques (a-z, A-Z, 0-9, _)\W : non-caractère alphanumérique\s : espace, tabulation, saut de ligne\S : non-espaceClasses de caractères personnalisées : définies avec [ ] pour inclure ou exclure certains caractères, avec intervalles [a-z], [0-9], ou négations [^ ].
Quantificateurs : indiquent le nombre de répétitions d’un motif.
{n} : exactement n fois{n,m} : entre n et m fois+ : une ou plusieurs fois* : zéro ou plusieurs fois? : zéro ou une foisAncres : délimitent le positionnement dans le texte.
^ : début de ligne ou texte$ : fin de ligne ou texte\b : frontière de mot (début ou fin d’un mot)Groupes : permettent de capturer des sous-parties d’une correspondance.
() : groupes capturants(?: ) : groupes non capturants(?<nom> ) : groupes nommésLookaround : vérifient la présence ou l’absence d’un motif avant ou après une position, sans inclure ce motif dans la correspondance.
(?= ) : lookahead positif(?! ) : lookahead négatif(?<= ) : lookbehind positif(?<! ) : lookbehind négatifPropriétés Unicode : permettent de cibler des ensembles de caractères spécifiques à une langue ou un script.
\p{L} : toutes les lettres\p{Lu} : lettres majuscules\p{Ll} : lettres minuscules\p{Number} : tous les nombres\p{Emoji} : emojis\p{Script=Greek} : caractères grecsFlags (marqueurs) : modifient le comportement de la recherche.
g : recherche globalei : insensible à la cassem : mode multilignesu : active l’Unicodes : dotAll, le . inclut les sauts de ligney : recherche à la position lastIndex\d, \w, \s) facilitent la correspondance avec des types spécifiques de caractères.[a-z] ou [0-9] permettent de définir précisément une gamme de caractères.{n,m} permet de préciser le nombre exact ou minimal de répétitions.^ et $ sont essentielles pour vérifier le début ou la fin d’un texte ou d’une ligne.( ) permet d’extraire des sous-parties du texte, notamment avec des groupes nommés (?<nom> ).(?= ), (?! ), (?<= ), (?<! ) offrent une puissance supplémentaire pour vérifier la présence ou l’absence d’un motif avant ou après une position.\p{ } et le flag u permet de gérer efficacement les caractères spéciaux et scripts non latins.Les propriétés Unicode offrent une flexibilité exceptionnelle pour manipuler et valider des textes multilingues ou contenant des symboles spécifiques, rendant les expressions régulières puissantes et adaptées à des contextes internationaux.
| Aspect | Caractères littéraux | Classes prédéfinies |
|---|---|---|
| Définition | Correspondance exacte à un caractère ou mot | Raccourcis pour ensembles de caractères courants |
| Exemples | /a/ → "a", /1/ → "1" | \d (chiffres), \w (mots), \s (espaces) |
| Échappement | Non nécessaire sauf si caractère spécial (\.) | \ pour utiliser la classe comme caractère littéral |
| Plages ou intervalles | [a-z], [0-9] | Non applicable |
| Utilisation principale | Recherche exacte | Validation, recherche de groupes de caractères |
| Aspect | Quantificateurs | Ancres et Groupes |
|---|---|---|
| Définition | Précise le nombre de répétitions | ^, $, \b, groupes ( ), groupes nommés (?<nom>) |
| Exemples | {3}, +, *, ? | ^abc$, (abc), (?<nom>abc) |
| Utilité | Contrôler la répétition | Définir positionnement ou capturer des sous-motifs |
| Aspect | Assertions lookaround | Classes d'espaces |
|---|---|---|
| Définition | Vérification sans consommation de caractères | \s, \S (espaces blancs ou non) |
| Exemples | (?=a), (?!b), (?<=c), (?<!d) | \d (chiffres), \w (mots), . (tout sauf saut ligne) |
| Utilité | Vérification de contexte sans capturer | Gestion des espaces, validation de formats |
. (n'importe quel caractère sauf saut de ligne) et \. (point littéral).[ ] (ex : -, ^, ]).\w sans considérer qu'il ne couvre pas tous les caractères accentués ou spéciaux.[a-z] (inclusifs, en fonction de la locale).+ (une ou plusieurs) et * (zéro ou plusieurs).^ et $ sont des ancres de début et fin de ligne, pas de mot.( ) versus groupes non capturants (?: ).(=) et négatives (?! ).u) quand nécessaire, notamment pour caractères spéciaux.\d (chiffres) et \D (non chiffres), ou \s (espaces) et \S (non espaces).\).\d, \w, \s, etc.).[ ].{ }, +, *, ?.^ et $ pour délimiter le début et la fin d’un texte ou d’une ligne.( ) et la référence aux groupes capturés.(=), (?! ), (?<=), (?<! ).\s, \S et leur impact.u).test().[a-z], [0-9] et leur inclusivité.Metti alla prova le tue conoscenze su Maîtrise des classes et propriétés en regex con 9 domande a scelta multipla con correzioni dettagliate.
1. Qu'est-ce qu'un caractère littéral dans une expression régulière ?
2. Qu'est-ce qu'un caractère spécial en regex et comment peut-on le faire correspondre littéralement dans une expression régulière?
Memorizza i concetti chiave di Maîtrise des classes et propriétés en regex con 10 flashcard interattive.
Caractères littéraux — définition ?
Correspondance exacte à un caractère.
Caractère littéral — définition?
Symbole ou lettre correspondant exactement au texte.
Classes prédéfinies — rôle ?
Simplifient la recherche de caractères courants.
Intelligence Artificielle
Bases de données
Bases de données
Bases de données
Importa il tuo corso e l'AI genera schede, quiz e flashcard in 30 secondi.
Generatore di schede