Expressions régulières étendues dans la commande lex
La spécification d'expressions régulières étendues dans un fichier de spécifications lex est similaire aux méthodes utilisées dans les commandes sed ou ed .
Une expression régulière étendue spécifie un ensemble de chaînes à mettre en correspondance. L'expression contient à la fois des caractères de texte et des caractères d'opérateur. Les caractères de texte correspondent aux caractères correspondants dans les chaînes comparées. Les caractères opérateur spécifient des répétitions, des choix et d'autres fonctions.
Les chiffres et les lettres de l'alphabet sont considérés comme des caractères de texte. Par exemple, l'expression régulière étendueintegercorrespond à la chaîneintegeret l'expressiona57Drecherche la chaînea57D.
Opérateurs
- CHARACTER
- Correspond au caractère Caractère.
Exemple : acorrespond au caractère littéral a ;bcorrespond au caractère littéral b, etccorrespond au caractère littéral c.
- "Chaîne"
- Correspond à la chaîne entre guillemets, même si la chaîne inclut un opérateur.
Exemple: Pour empêcher l'interprétation de la commande lex$(symbole du dollar) en tant qu'opérateur, placez le symbole entre guillemets.
- \Caractère ou \Chiffre
- Caractère d'échappement. Lorsqu'il précède un opérateur de classe de caractères utilisé dans une chaîne, le\indique que le symbole de l'opérateur représente un caractère littéral plutôt qu'un opérateur. Les séquences d'échappement valides sont les suivantes:
- \a
- Alerte
- \b
- Retour arrière
- \f
- saut de page
- \n
- Caractère de nouvelle ligne (N'utilisez pas le caractère de nouvelle ligne réel dans une expression.)
- \r
- Renvoyer
- \t
- Onglet
- \v
- Onglet vertical
- \\
- Barre oblique inversée
- \Chiffre
- Caractère dont le codage est représenté par l'entier octal à un chiffre, à deux chiffres ou à trois chiffres spécifié par la chaîne Digits .
- \xChiffre
- Caractère dont le codage est représenté par la séquence de caractères hexadécimaux spécifiée par la chaîne Digits .
Lorsque le\précède un caractère qui ne figure pas dans la liste précédente de séquences d'échappement, la commande lex l'interprète littéralement.
Exemple : \cest interprété comme leccaractère non modifié, et[\^abc]représente la classe de caractères qui inclut les caractères^abc.
Remarque: N'utilisez jamais\0 ou\x0dans la commande lex .
- [Liste]
- Correspond à n'importe quel caractère de la plage incluse ([x - y]) ou la liste jointe ([xyz]) en fonction de l'environnement local dans lequel la commande lex est appelée. Tous les symboles d'opérateur, à l'exception des suivants, perdent leur signification spéciale dans une expression entre crochets:-(tiret),^(caret) et\(barre oblique inversée).
Exemple : [abc-f]correspond à
a,b,c,d,eoufdans l'environnement local en_US. - [:Classe:]
- Correspond à l'un des caractères appartenant à la classe de caractères spécifiée entre[::]délimiteurs tels que définis dans la catégorie LC_TYPE dans l'environnement local en cours. Les noms de classe de caractères suivants sont pris en charge dans tous les environnements locaux:
alnum cntrl lower space alpha digit print upper blank graph punct xdigitLa commande lex reconnaît également les noms de classe de caractères définis par l'utilisateur. :NONE.[::]l'opérateur n'est valide que dans un[].
Exemple : [[:alpha:]]correspond à n'importe quel caractère de la classe de caractères alpha dans l'environnement local en cours, mais[:alpha:]correspond uniquement aux caractères:,a,l,peth.
- [.CollatingSymbol.]
- Correspond au symbole de classement spécifié dans le[..]délimiteurs en tant que caractère unique. :NONE.[..]l'opérateur n'est valide que dans un[ ]. Le symbole de classement doit être un symbole de classement valide pour l'environnement local en cours.
Exemple : [[.ch.]]correspondcethensemble alors que[ch]correspondcouh.
- [=CollatingElement=]
- Correspond à l'élément de classement spécifié dans le[==]délimiteurs et tous les éléments de classement appartenant à sa classe d'équivalence. :NONE.[==]l'opérateur n'est valide que dans un[].
Exemple: Ifwetvappartiennent à la même classe d'équivalence,[[=w=]]est identique à[wv]et correspond àwouv. Siwn'appartient pas à une classe d'équivalence, alors[[=w=]]correspondwuniquement.
- [^CHARACTER]
- Correspond à n'importe quel caractère à l'exception de celui qui suit le^(caret). La classe de caractères obtenue se compose uniquement de caractères mono-octet. Le caractère suivant le^Le symbole peut être un caractère multioctet. Toutefois, pour que cet opérateur corresponde à des caractères multi-octets, vous devez définir %h et %m sur une valeur supérieure à zéro dans la section des définitions.
Exemple : [^c]correspond à n'importe quel caractère saufc.
- CollatingElement-CollatingElement
- Dans une classe de caractères, indique une plage de caractères dans la séquence de classement définie pour l'environnement local en cours. Les plages doivent être dans l'ordre croissant. Le point de fin de la plage doit être égal ou supérieur au point de début de la plage. Etant donné que la plage est basée sur la séquence de classement de l'environnement local en cours, une plage donnée peut correspondre à des caractères différents, en fonction de l'environnement local dans lequel la commande lex a été appelée.
- Expression?
- Correspond à zéro ou à une occurrence de l'expression précédant immédiatement la?opérateur.
Exemple : ab?ccorrespond à ac ou abc.
- Caractère point (.)
- Correspond à n'importe quel caractère à l'exception du caractère de nouvelle ligne. Pour le caractère point (.) pour faire correspondre des caractères multi-octets, %z doit être défini sur une valeur supérieure à 0 dans la section des définitions du fichier de spécifications lex . Si %z n'est pas défini, le point (.) correspond uniquement aux caractères mono-octet.
- Expression*
- Correspond à zéro ou plusieurs occurrences de l'expression précédant immédiatement la*opérateur. Par exemple :a*est n'importe quel nombre deacaractères, y compris zéro. L'utilité de la mise en correspondance des occurrences zéro est plus évidente dans les expressions compliquées.
Exemple: L'expression,[A-Za-z][A-Za-z0-9]* indique toutes les chaînes alphanumériques avec un caractère alphabétique de début, y compris les chaînes qui ne sont qu'un seul caractère alphabétique. Vous pouvez utiliser cette expression pour reconnaître les identificateurs dans les langages informatiques.
- Expression+
- Correspond à une ou plusieurs occurrences du modèle précédant immédiatement la+opérateur.
Exemple : a+correspond à une ou plusieurs instances dea. En outre,[a-z]+correspond à toutes les chaînes de lettres minuscules.
- Expression|Expression
- Indique une correspondance pour l'expression qui précède ou suit l'opérateur | (barre verticale).
Exemple : ab|cdcorrespond à l'uneaboucd.
- (Expression)
- Correspond à l'expression entre parenthèses. :NONE.()L'opérateur (parenthèses) est utilisé pour le regroupement et entraîne la lecture de l'expression entre parenthèses dans le tableau yytext . Un groupe entre parenthèses peut être utilisé à la place de n'importe quel caractère unique dans n'importe quel autre modèle.
Exemple : (ab|cd+)?(ef)*correspond à des chaînes telles queabefef,efefef,cdefoucddd; mais pasabc,abcdouabcdef.
- ^Expression
- Indique une correspondance uniquement lorsque Expression est au début de la ligne et que^(caret) est le premier caractère d'une expression.
Exemple : ^hcorrespond à un hau début d'une ligne.
- Expression$
- Indique une correspondance uniquement lorsque Expression est à la fin de la ligne et que$L'opérateur (symbole du dollar) est le dernier caractère d'une expression.
Exemple:
h$correspond à unhà la fin d'une ligne. - Expression1/Expression2
- Indique une correspondance uniquement si Expression2 suit immédiatement Expression1. :NONE./L'opérateur (barre oblique) lit uniquement la première expression dans le tableau yytext .
Exemple :ab/cdcorrespond à la chaîneab, mais seulement si elle est suivie parcd, puis litabdans le tableau yytext .
Remarque: un seul/L'opérateur de contexte de fin peut être utilisé dans une expression régulière étendue unique. :NONE.^(caret) et$(symbole du dollar) ne peuvent pas être utilisés dans la même expression que/car ils indiquent des cas spéciaux de contexte de fin. - {DefinedName}
- Correspond au nom tel que vous l'avez défini dans la section des définitions.
Exemple: Si vous avez définiDêtre des chiffres numériques,{D}correspond à tous les chiffres numériques.
- {Number1,Number2}
- Fait correspondre Number1 à Number2 occurrences du modèle qui le précède immédiatement. Les expressions{Nombre}et{Nombre,}sont également autorisées et correspondent exactement à Nombre occurrences du modèle précédant l'expression.
Exemple : xyz{2,4}correspond à xyzxyz, xyzxyzxyz ou xyzxyzxyzxyzxyz. Ceci diffère de+,*et?en ce que ces opérateurs ne correspondent qu'au caractère qui les précède immédiatement. Pour ne faire correspondre que le caractère précédant l'expression d'intervalle, utilisez l'opérateur de regroupement. Par exemple :xy(z{2,4})correspond à xyzz, xyzzz ou xyzzzz.
- <StartCondition>
- Exécute l'action associée uniquement si l'analyseur lexical se trouve dans la condition de démarrage indiquée
Exemple: Si le fait d'être au début d'une ligne est une condition de débutONE, puis le^L'opérateur (caret) est égal à l'expression<ONE>.
xyz"++"Une partie d'une chaîne peut être placée entre guillemets. La citation d'un caractère de texte ordinaire n'a pas d'effet. Par exemple, l'expression suivante est équivalente à l'exemple précédent:
"xyz++"Pour vous assurer que le texte est interprété comme du texte, mettez entre guillemets tous les caractères qui ne sont pas des lettres ou des chiffres.
xyz\+\+