• Aucun résultat trouvé

Utilisation d’expressions régulières

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Une expression régulière décrit un modèle servant à rechercher et à manipuler du texte de correspondance dans des chaînes. Les expressions régulières ressemblent à des chaînes, mais elles comprennent des codes spéciaux pour décrire des modèles et des répétitions. Par exemple, l’expression régulière suivante correspond à une chaîne qui commence par le caractère A suivi d’un ou de plusieurs chiffres séquentiels :

/A\d+/

Les rubriques suivantes sont consacrées à la syntaxe de base de construction d’expressions régulières. Néanmoins, les expressions régulières peuvent être très complexes et comporter de nombreuses nuances. Vous pouvez vous documenter sur les expressions régulières sur le Web et dans les librairies. Différents environnements de programmation implémentent des expressions régulières de différentes façons. ActionScript 3.0 implémente des expressions régulières comme défini dans la version 3 de la spécification du langage ECMAScript (ECMA-262). Voir aussi

RegExp

Principes de base des expressions régulières

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Une expression régulière décrit un modèle de caractères. Les expressions régulières servent généralement à vérifier qu’une valeur de texte est conforme à un modèle particulier (par exemple, vérifier qu’un numéro de téléphone saisi par l’utilisateur comporte le nombre de chiffres correct) ou à remplacer des portions d’une valeur de texte qui

correspondent à un modèle donné.

Les expressions régulières peuvent être simples. Par exemple, supposons que vous souhaitiez confirmer qu’une chaîne particulière correspond à ABC ou que vous souhaitiez remplacer chaque occurrence d’ABC dans une chaîne par un autre texte. Dans ce cas, vous pouvez utiliser l’expression régulière suivante qui définit le modèle comportant les lettres A, B et C, dans l’ordre :

/ABC/

Le littéral de l’expression régulière est délimité avec la barre oblique (/).

Les modèles d’expression régulière peuvent également être complexes et parfois sembler obscures, comme l’expression suivante pour établir une correspondance avec une adresse électronique valide :

Vous utiliserez le plus souvent des expressions régulières pour rechercher des modèles dans des chaînes et pour remplacer des caractères. Dans ces cas, vous créerez un objet d’expression régulière et l’utiliserez comme paramètre pour une ou plusieurs méthodes de classe String. Les méthodes suivantes de la classe String prennent des expressions régulières comme paramètres : match(), replace(), search() et split(). Pour plus d’informations sur ces méthodes, voir « Recherche de modèles dans des chaînes et remplacement de sous-chaînes » à la page 17.

La classe RegExp comprend les méthodes suivantes : test() et exec(). Pour plus d’informations, voir « Méthodes d’utilisation d’expressions régulières avec des chaînes » à la page 93.

Concepts importants et terminologie

La liste de référence suivante contient des termes importants relatifs à la fonctionnalité étudiée.

Caractère d’échappement Caractère indiquant que le caractère qui suit doit être considéré comme un caractère de remplacement plutôt que comme un caractère littéral. Dans une syntaxe d’expression régulière, la barre oblique inverse (\) est le caractère d’échappement. Par conséquent, une barre oblique inverse suivie d’un autre caractère est un code spécial plutôt que le caractère à proprement parler.

Indicateur Caractère qui spécifie une option associée au mode d’utilisation du modèle d’expression régulière (respect de la casse, par exemple).

Caractère de remplacement Caractère qui a une signification spéciale dans un modèle d’expression régulière et qui ne représente pas littéralement ce caractère dans le modèle.

Quantificateur Caractères indiquant le nombre de répétitions d’une partie du modèle. Par exemple, un quantificateur peut être utilisé pour indiquer qu’un code postal américain doit contenir cinq ou neuf chiffres.

Expression régulière Instruction de programme définissant un modèle de caractères qui permet de confirmer si d’autres chaînes correspondent à ce modèle ou de remplacer des sections d’une chaîne.

Syntaxe d’expression régulière

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Cette section décrit tous les éléments de la syntaxe d’expression régulière d’ActionScript. Comme vous pourrez le constater, les expressions régulières peuvent être très complexes et comporter de nombreuses nuances. Vous pouvez vous documenter sur les expressions régulières sur le Web et dans les librairies. Différents environnements de programmation implémentent des expressions régulières de différentes façons. ActionScript 3.0 implémente des expressions régulières comme défini dans la version 3 de la spécification du langage ECMAScript (ECMA-262). Généralement, vous utilisez des expressions régulières qui correspondent à des modèles plus compliqués qu’une simple chaîne de caractères. Par exemple, l’expression régulière suivante définit le modèle comportant les lettres A, B et C, dans l’ordre, suivies par un chiffre :

/ABC\d/

Le code \d représente un chiffre. La barre oblique inverse (\) est appelée caractère d’échappement. Lorsqu’elle est combinée au caractère qui la suit (dans ce cas, la lettre d), elle a une signification spéciale dans l’expression régulière. L’expression régulière suivante définit le modèle des lettres ABC suivies par des chiffres (remarquez l’astérisque) :

L’astérisque (*) est un caractère de remplacement. Un caractère de remplacement est un caractère ayant une

signification spéciale dans les expressions régulières. L’astérisque est un type de caractère de remplacement spécifique appelé quantificateur, utilisé pour quantifier le nombre de répétitions d’un caractère ou groupe de caractères. Pour plus de détails, voir « Quantificateurs » à la page 85.

Outre son modèle, une expression régulière peut contenir des indicateurs qui spécifient comment l’expression régulière doit être mise en correspondance. Par exemple, l’expression régulière suivante utilise l’indicateur i qui indique qu’elle ignore le respect de la casse dans les chaînes de correspondance :

/ABC\d*/i

Pour plus d’informations, voir « Indicateurs et propriétés » à la page 89.

Vous pouvez utiliser des expressions régulières à l’aide des méthodes suivantes de la classe String : match(),

replace() et search(). Pour plus d’informations sur ces méthodes, voir « Recherche de modèles dans des chaînes et remplacement de sous-chaînes » à la page 17.

Création d’une occurrence d’expression régulière

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Il existe deux façons de créer une occurrence d’expression régulière. L’une des méthodes consiste à utiliser des barres obliques (/) pour délimiter l’expression régulière, et l’autre consiste à utiliser le constructeur new. Par exemple, les expressions régulières suivantes sont équivalentes :

var pattern1:RegExp = /bob/i;

var pattern2:RegExp = new RegExp("bob", "i");

Des barres obliques délimitent un littéral d’expression régulière de la même façon que des guillemets délimitent un littéral de chaîne. La partie de l’expression régulière contenue entre les barres obliques définit le modèle. L’expression régulière peut également inclure des indicateurs après la barre de délimitation finale. Ces indicateurs sont considérés comme faisant partie de l’expression régulière, mais ils sont séparés de son modèle.

Lorsque vous utilisez le constructeur new, vous utilisez deux chaînes pour définir l’expression régulière. La première chaîne définit le modèle, et la seconde les indicateurs, comme dans l’exemple suivant :

var pattern2:RegExp = new RegExp("bob", "i");

Lorsque vous incluez une barre oblique dans une expression régulière qui est définie à l’aide de délimiteurs de barre oblique, vous devez faire précéder la barre oblique du caractère d’échappement (\). Par exemple, l’expression régulière suivante correspond au modèle 1/2 :

var pattern:RegExp = /1\/2/;

Pour inclure des guillemets dans une expression régulière définie avec le constructeur new, vous devez ajouter un caractère d’échappement (\) avant les guillemets (comme lorsque vous définissez un littéral String). Par exemple, les expressions régulières suivantes correspondent au modèle eat at "joe's" :

var pattern1:RegExp = new RegExp("eat at \"joe's\"", ""); var pattern2:RegExp = new RegExp('eat at "joe\'s"', "");

N’utilisez pas le caractère d’échappement avec des guillemets dans des expressions régulières définies à l’aide des délimiteurs de barre oblique. De même, n’utilisez pas le caractère d’échappement avec des barres obliques dans des expressions régulières définies avec le constructeur new. Les expressions régulières suivantes sont équivalentes. Elles définissent le modèle 1/2 "joe's" :

var pattern1:RegExp = /1\/2 "joe's"/;

var pattern2:RegExp = new RegExp("1/2 \"joe's\"", ""); var pattern3:RegExp = new RegExp('1/2 "joe\'s"', '');

De même, dans une expression régulière définie à l’aide du constructeur new, tapez deux fois le caractère barre oblique inverse pour utiliser une métaséquence débutant par le caractère barre oblique inverse(\), telle que \d (qui correspond à n’importe quel chiffre).

var pattern:RegExp = new RegExp("\\d+", ""); // matches one or more digits

Vous devez taper deux fois le caractère barre oblique inverse, car le premier paramètre de la méthode constructeur

RegExp() est une chaîne. Dans un littéral de chaîne, ce caractère doit être entré deux fois pour être interprété comme une barre oblique inverse unique.

La section qui suit décrit la syntaxe servant à définir des modèles d’expression régulière. Pour plus d’informations, voir « Indicateurs et propriétés » à la page 89.

Caractères, caractères de remplacement et métaséquences

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

L’expression régulière la plus simple est celle qui correspond à une séquence de caractères, comme dans l’exemple suivant :

var pattern:RegExp = /hello/;

Néanmoins, les caractères suivants, appelés caractères de remplacement, ont des significations spéciales dans des expressions régulières :

^ $ \ . * + ? ( ) [ ] { } |

Par exemple, l’expression régulière suivante correspond à la lettre A suivie par zéro ou plusieurs occurrences de la lettre B (le caractère de remplacement astérisque indique cette répétition), suivie par la lettre C :

/AB*C/

Pour inclure un caractère de remplacement sans sa signification spéciale dans un modèle d’expression régulière, vous devez utiliser le caractère d’échappement (\). Par exemple, l’expression régulière suivante correspond à la lettre A suivie par la lettre B, suivie par un astérisque, suivie par la lettre C :

var pattern:RegExp = /AB\*C/;

Une métaséquence, comme un caractère de remplacement, a une signification spéciale dans une expression régulière. Une métaséquence est constituée de plusieurs caractères. Les sections suivantes fournissent des détails sur l’utilisation des caractères de remplacement et des métaséquences.

A propos des caractères de remplacement

Caractère de remplacement Description

^ (caret) Etablit une correspondance au début d’une chaîne. Lorsque l’indicateur m (multiline) est défini, le caret correspond au début d’une ligne également (voir « Indicateurs et propriétés » à la page 89). Lorsqu’il est utilisé au début d’une classe de caractère, le caret indique la négation et non le début d’une chaîne. Pour plus d’informations, voir « Classes de caractère » à la page 83.

$(signe dollar) Etablit une correspondance à la fin d’une chaîne. Lorsque l’indicateur m (multiline) est défini, $ correspond à la position avant une nouvelle ligne (\n) également. Pour plus d’informations, voir « Indicateurs et propriétés » à la page 89.

\ (caractère d’échappement) Echappe la signification spéciale du caractère de remplacement des caractères spéciaux.

Vous pouvez également utiliser le caractère d’échappement si vous souhaitez utiliser une barre oblique dans un littéral d’expression régulière, comme dans /1\/2/ (pour correspondre au caractère 1, suivi par la barre oblique, suivi par le caractère 2).

. (point) Correspond à un seul caractère.

Un point correspond à un caractère de nouvelle ligne (\n) uniquement si l’indicateur s (dotall) est défini. Pour plus d’informations, voir « Indicateurs et propriétés » à la page 89.

* (étoile) Correspond à l’élément précédent répété zéro ou plusieurs fois. Pour plus de détails, voir « Quantificateurs » à la page 85. + (plus) Correspond à l’élément précédent répété une ou plusieurs fois.

Pour plus de détails, voir « Quantificateurs » à la page 85. ? (point d’interrogation) Correspond à l’élément précédent répété zéro ou une fois.

Pour plus de détails, voir « Quantificateurs » à la page 85.

( et ) Définit des groupes dans l’expression régulière. Utilisez des groupes pour :

• confiner le domaine du permutateur | : /(a|b|c)d/

• définir le domaine d’un quantificateur :/(walla.){1,2}/

• dans des backreferences. Par exemple, le \1 dans l’expression régulière suivante correspond à toute correspondance au premier groupe entre parenthèses du modèle :

• /(\w*) est répété : \1/

Pour plus d’informations, voir « Groupes » à la page 87.

[ et ] Spécifie une classe de caractère qui définit des correspondances possibles pour un seul caractère : /[aeiou]/ correspond à l’un des caractères spécifiés.

Dans les classes de caractère, utilisez le trait d’union (-) pour désigner une plage de caractères : /[A-Z0-9]/ correspond aux lettres majuscules A à Z ou aux chiffres 0 à 9.

Dans les classes de caractère, insérez un caractère d’échappement pour échapper les caractères ] et les caractères -:

/[+\-]\d+/ correspond à + ou à - avant un ou plusieurs chiffres.

Dans les classes de caractère, d’autres caractères (qui sont normalement des caractères de remplacement) sont considérés comme des caractères normaux (et non comme des caractères de remplacement), sans qu’une barre oblique inverse soit nécessaire :

/[$]/£ correspond à $ou à £.

Pour plus d’informations, voir « Classes de caractère » à la page 83. | (opérateur de transfert de

données)

Utilisé pour la permutation, pour correspondre à la partie de gauche ou à celle de droite : /abc|xyz/ correspond à abc ou à xyz.

A propos des métaséquences

Les métaséquences sont des séquences de caractères ayant une signification spéciale dans un modèle d’expression régulière. Le tableau suivant décrit ces métaséquences :

Classes de caractère

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Vous utilisez des classes de caractère pour spécifier une liste de caractères devant correspondre à une position dans l’expression régulière. Vous définissez des classes de caractère avec des crochets ( [ et ] ). Par exemple, l’expression régulière suivante définit une classe de caractère qui remplace bag, beg, big, bog ou bug :

/b[aeiou]g/ Métaséquence Description {n} {n,} et {n,n}

Indique un quantificateur numérique ou une plage de quantificateurs pour l’élément précédent : /A{27}/ correspond au caractère A répété 27 fois.

/A{3}/ correspond au caractère A répété 3 fois ou plus. /A{3,5}/ correspond au caractère A répété 3 à 5 fois. Pour plus de détails, voir « Quantificateurs » à la page 85.

\b Etablit une correspondance à la position entre un caractère mot et un caractère non-mot. Si le premier ou le dernier caractère dans la chaîne est un caractère mot, correspond également au début ou à la fin de la chaîne.

\B Etablit une correspondance à la position entre deux caractères mot. Correspond également à la position entre deux caractères non-mot.

\d Correspond à une décimale.

\D Correspond à tout caractère autre qu’un chiffre.

\f Correspond à un caractère de changement de page.

\n Correspond au caractère de nouvelle ligne.

\r Correspond au caractère de retour de chariot.

\s Correspond à tout caractère d’espace blanc (un espace, une tabulation, une nouvelle ligne ou un caractère de retour de chariot).

\S Correspond à tout caractère autre qu’un caractère d’espace blanc.

\t Correspond au caractère de tabulation.

\unnnn Correspond au caractère Unicode avec le code de caractère spécifié par le nombre hexadécimal nnnn. Par exemple, \u263a est le caractère smiley.

\v Correspond à un caractère d’avancement vertical.

\w Correspond à un caractère mot (AZ–, az–, 0-9 ou _). \w ne correspond pas aux caractères qui ne sont pas anglais tels que é, ñ, ou ç.

\W Correspond à tout caractère autre qu’un caractère mot.

Séquences d’échappement dans des classes de caractère

La plupart des caractères de remplacement et des métaséquences ayant normalement des significations spéciales dans une expression régulière n’ont pas ces mêmes significations dans une classe de caractère. Par exemple, dans une expression régulière, l’astérisque est utilisé pour la répétition, mais ce n’est pas le cas lorsqu’il apparaît dans une classe de caractère. La classe de caractère suivante correspond à l’astérisque de façon littérale, avec tout autre caractère répertorié :

/[abc*123]/

Cependant, les trois caractères répertoriés dans le tableau suivant fonctionnent comme des caractères de remplacement, avec une signification spéciale, dans des classes de caractère :

Pour que ces caractères soient reconnus comme caractères littéraux (dans la signification du caractère de

remplacement spéciale), vous devez faire précéder le caractère du caractère d’échappement. Par exemple, l’expression régulière suivante inclut une classe de caractère qui correspond à l’un des quatre symboles ($, \, ] ou -) :

/[$\\\]\-]/

Outre les caractères de remplacement qui conservent leurs significations spéciales, les métaséquences suivantes fonctionnent comme des métaséquences dans des classes de caractère :

D’autres caractères de remplacement et métaséquences d’expression régulière sont considérés comme des caractères normaux dans une classe de caractère.

Plages de caractères dans des classes de caractère

Utilisez le trait d’union pour spécifier une plage de caractères telle que A-Z, a-z, ou 0-9. Ces caractères doivent constituer une plage valide dans le jeu de caractères. Par exemple, la classe de caractère suivante correspond à un caractère compris dans la plage a-z ou un chiffre :

/[a-z0-9]/

Vous pouvez également utiliser le code de caractère ASCII \\xnn pour spécifier une plage par valeur ASCII. Par

exemple, la classe de caractère suivante correspond à un caractère d’un jeu de caractères ASCII étendus (é et ê, par exemple) :

\\x

Caractère de remplacement Signification dans des classes de caractère

] Définit la fin de la classe de caractère.

- Définit une plage de caractères (voir la section suivante, " Plages de caractères dans des classes de caractère ”).

\ Définit des métaséquences et annule la signification spéciale des caractères de remplacement.

Métaséquence Signification dans des classes de caractère

\n Correspond à un caractère de nouvelle ligne.

\r Correspond à un caractère de retour de chariot.

\t Correspond à un caractère de tabulation.

\unnnn Correspond au caractère avec la valeur de point de code Unicode spécifiée (comme défini par le nombre hexadécimal nnnn).

Classes de caractère niées

Lorsque vous utilisez un caret (^) au début d’une classe de caractère, il la nie (tout caractère non répertorié est considéré comme une correspondance). La classe de caractère suivante correspond à tout caractère sauf une lettre minuscule (az–) ou un chiffre :

/[^a-z0-9]/

Vous devez taper le caret (^) au début d’une classe de caractère pour indiquer la négation. Autrement, vous ajoutez simplement le caret aux caractères dans la classe de caractère. Par exemple, la classe de caractère suivante correspond à un symbole (le caret, notamment) :

/[!.,#+*%$&^]/

Quantificateurs

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Vous utilisez des quantificateurs pour spécifier des répétitions de caractères ou de séquences dans des modèles, comme suit :

Vous pouvez appliquer un quantificateur à un seul caractère, à une classe de caractère ou à un groupe :

• /a+/ correspond au caractère a répété une ou plusieurs fois.

• /\d+/ correspond à un ou plusieurs chiffres.

• /[abc]+/ correspond à une répétition d’un ou de plusieurs caractères, a, b, ou c.

• /(very, )*/ correspond au mot very suivi par une virgule et un espace répété zéro ou plusieurs fois.

Vous pouvez utiliser des quantificateurs dans des groupes de parenthèses auxquels sont appliqués des quantificateurs. Par exemple, le quantificateur suivant correspond à des chaînes du type word et word-word-word :

/\w+(-\w+)*/

Par défaut, les expressions régulières effectuent un greedy matching. Tout sous-modèle dans l’expression régulière (.*, par exemple) tente de mettre en correspondance autant de caractères que possible dans la chaîne avant de passer à la partie suivante de l’expression régulière. Par exemple, considérez l’expression régulière et la chaîne suivantes :

var pattern:RegExp = /<p>.*<\/p>/;

str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";

L’expression régulière correspond à la chaîne entière :

<p>Paragraph 1</p> <p>Paragraph 2</p>

Caractère de remplacement de quantificateur

Description

* (étoile) Correspond à l’élément précédent répété zéro ou plusieurs fois. + (plus) Correspond à l’élément précédent répété une ou plusieurs fois. ? (point d’interrogation) Correspond à l’élément précédent répété zéro ou une fois. {n}

{n,} et {n,n}

Indique un quantificateur numérique ou une plage de quantificateurs pour l’élément précédent : /A{27}/ correspond au caractère A répété 27 fois.

/A{3}/ correspond au caractère A répété 3 fois ou plus. /A{3,5}/ correspond au caractère A répété 3 à 5 fois.

Supposez, néanmoins, que vous souhaitez établir une correspondance avec un seul groupe <p>...</p>. Vous pouvez procéder comme suit :

<p>Paragraph 1</p>

Ajoutez un point d’interrogation (?) après les quantificateurs pour qu’ils deviennent des quantificateurs paresseux. Par exemple, l’expression régulière suivante, qui utilise le quantificateur paresseux *? , correspond à <p> suivi du nombre minimum de caractères possible (paresseux), suivi de </p> :

/<p>.*?<\/p>/

Lisez attentivement les points suivants concernant les quantificateurs :

• Les quantificateurs {0} et {0,0} n’excluent pas un élément d’une correspondance.

• Ne combinez pas plusieurs quantificateurs, comme dans /abc+*/.

• Le caractère point (.) ne divise pas les lignes en deux à moins de définir l’indicateur s (dotall), même s’il est suivi d’un quantificateur *. Considérons par exemple le code qui suit :

var str:String = "<p>Test\n"; str += "Multiline</p>"; var re:RegExp = /<p>.*<\/p>/; trace(str.match(re)); // null; re = /<p>.*<\/p>/s; trace(str.match(re)); // output: <p>Test // Multiline</p>

Pour plus d’informations, voir « Indicateurs et propriétés » à la page 89.

Permutation

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Documents relatifs