Services webmasters
Partenaires
Jeux concours gratuits
 
Méta-caractères
<<<
Antislash Accent circonflexe et Dollar
>>>

7.89.9.1 Détails sur les expressions régulières
7.89.9 syntaxe des masques
7.89 Expressions régulières compatibles Perl
7 Index des fonctions
 Manuel PHP

Introduction
Méta-caractères
->Antislash
Accent circonflexe et Dollar
Point
Crochets
Barre verticale
Options internes
Sous-masques
Répétitions
Références arrières
Assertions
Sous-masques uniques
Les sous-masques conditionnels
Commentaires
Masques récursifs
Performances

Antislash

Le caractère antislash a de nombreuses utilisations.

En premier lieu, s'il est suivi d'un caractère non alpha-numérique, il ne prendra pas la signification spéciale qui y est rattachée. Cette utilisation de l'antislash comme caractère d'échappement s'applique à l'intérieur et à l'extérieur des classes de caractères. Par exemple, pour recherche le caractère étoile " * ", il faut écrire dans le masque : " \* ". Cela s'applique dans tous les cas, que le caractère qui suive soit un méta-caractère ou non. C'est un moyen sûr pour s'assurer qu'un caractère sera recherché pour sa valeur littérale, plutôt que pour sa valeur spéciale. En particulier, pour rechercher les antislash, il faut écrire : " \\ ".

Si un masque est utilisé avec l'option PCRE_EXTENDED , les espaces blancs du masque, mais qui ne sont pas dans une classe de caractères, et les caractères entre dièses " # ", ainsi que les nouvelles lignes sont ignorées. L'antislash peut être utilisé pour échapper et ainsi rechercher un espace ou un dièse.

La deuxième utilité de l'antislash est de pouvoir coder des caractères invisibles dans les masques. Il n'y a pas de restriction sur la place de ces caractères invisibles, hormis pour le caractère nul qui doit terminer le masque.

Lors de la préparation du masque, il est souvent plus pratique d'utiliser les séquences d'échappement suivantes, plutôt que le caractère binaire qu'elle représente :

    \a
    alarme, c'est-à-dire le caractère BEL (hex 07)
    \cx
    "control-x", avec x qui peut être n'importe quel caractère.
    \e
    escape (hex 1B)
    \f
    formfeed (hex 0C)
    \n
    nouvelle ligne (hex 0A)
    \r
    retour chariot (hex 0D)
    \t
    tabulation (hex 09)
    \xhh
    caractère en hexadécimal, de code hh
    \ddd
    caractère en octal, de code ddd, ou référence arrière

Dans la séquence " \cx " si " x " est en minuscule, il est converti en majuscule. Puis, le bit 6 (hex 40) est inversé. Ainsi " \cz " devient 1A , mais " \c{ " devient hex 3B, tandis que " \c; " devient hex 7B.

Après " \x ", deux caractères hexadécimaeux sont lus (les lettres peuvent être en majuscule ou minuscule).

Après " \0 ", deux caractères octal sont lus. Dans chacun des cas, le méta-caractère tente de lire autant de caractère que possible. Ainsi la séquence " \0\x\07 ", sera comprise comme deux caractères nuls, suivi d'un caractère alarme (BEL). Assurez-vous que vous fournissez suffisamment de chiffres après le méta-caractère.

La gestion de la séquence " \y ", avec y <> 0 est plutôt compliquée. En dehors des caractères de classes, PCRE va lire y et tous les caractères qui suivent comme des chiffres décimaux. Si y est plus petit que 10, ou bien s'il y a déjà eu au moins autant de parenthèses ouvrantes auparavant, la séquence est prise pour une référence arrière. Le détail sera vu ultérieurement, après la section sur les sous-masques.

A l'intérieur d'un caractère de classe, ou si y est plus grand que 10, et qu'il n'y a pas eu assez de parenthèses ouvrantes auparavant, PCRE lis jusqu'à 3 chiffres octals à la suite de l'antislash, et génère un octet unique, à partir des 8 bits de poids faible de la séquence. Tous les chiffres qui suivent ne sont pas interprétés, et se representent eux-mêmes. Par exemple:

    \040
    une autre manière d'écrire un espace
    \40
    identique, dans la mesure où il n'y a pas 40 parenthèses ouvrantes auparavant
    \7
    est toujours une référence arrière
    \11
    peut être une référence de retour, ou une tabulation
    \011
    toujours une tabulation
    \0113
    est une tabulation suivi du caractère "3"
    \113
    est le caractère 113 (étant donné qu'il ne peut y avoir plus de 99 références arrières)
    \377
    est un octet dont tous les bits sont à 1
    \0113
    peut être soit une référence arrière, soit le caractère NULL , suivi des caractères "8" et "1"

Les valeurs octales supérieures ou égales à 100 ne doivent pas être introduites par un 0, car seuls les trois premiers octets seront lus.

Toutes les séquences qui définissent une valeur d'un seul octet peuvent être utilisé dans les classes de caractères, et à l'extérieur. De plus, dans une classe de caractères, la séquence " \b " est interprétée comme un caractère effacer (backspace, hex 08). A l'extérieur d'une classe de caractères, il peut avoir d'autres significations (voir ci-dessous).

On peut encore se servir de l'antislash pour préciser des types génériques de valeurs :

    \d
    tout caractère décimal
    \D
    tout caractère qui n'est pas un caractère décimal
    \s
    tout caractère blanc
    \S
    tout caractère qui n'est pas un caractère blanc
    \w
    tout caractère de "mot"
    \W
    tout caractère qui n'est pas un caractère de "mot"

Chaque paire précédente définit une partition de la table des caractères : les deux ensembles sont disjoints. Un caractère satisfera soit un méta-caractère, soit l'autre.

Un caractère de "mot" sera une lettre, un chiffre ou le caractère souligné, c'est-à-dire un caractère qui pourra être une partie d'un mot Perl. La définition des lettres et chiffres est définie par les tables de caractères de PCRE, et peut varier suivant la table locale de caractère (voir "Tables de caractères locales ", ci-dessus. Par exemple, dans la configuration français ("fr"), certains caractères ont des codes supérieurs à 128, pour les caractères accentués, et ils seront compris par le méta caractère \w .

Ces séquences de caractères peuvent apparaître à l'intérieur ou à l'extérieur des classes de caractères. Elles remplacent à chaque fois un caractère du type correspondant. Si cette séquence est placée en fin de masque, et qu'il n'y a plus de caractère à comparer dans la chaîne sujet, la recherche échoue.

La quatrième utilisation de l'antislash intervient lors d'assertions simples. Une assertion impose une condition à un certain point, sans remplacer de caractère. L'utilisation de sous-masques pour réaliser des assertions plus complexes est décrites plus-bas. Les assertions avec antislash sont les suivantes :

    \b
    limite de mot
    \B
    pas limite de mot
    \A
    début de la chaîne sujet (indépendant du mode multi-lignes)
    \Z
    fin de la chaîne sujet ou nouvelle ligne à la fin de la chaîne sujet (indépendant du mode multi-lignes)
    \z
    fin de la chaîne sujet (indépendant du mode multi-lignes)

Ces assertions ne peuvent pas apparaître dans une classe de caractères (mais "\b" a une autre signification à l'intérieur d'une classe de caractères).

Une limite de mot est un emplacement dans la chaîne sujet ou un caractère et son suivant ne sont pas en même temps des caractères de mot, ou le contraire (on peut le voir comme \w\W ou \W\w ), ou encore le premier ou le dernier caractère est un caractère mot.

Les assertions \A , \Z , et \z diffèrent des méta caractères ^ et $ dans la mesure où ils ne sont pas dépendants des options, notamment PCRE_NOTBOL ou PCRE_NOTEOL . La différence entre \Z et \z tient au fait que \Z recherche les positions avant les nouvelles lignes et à la fin de la chaîne sujet, tandis que \z ne recherche que la fin de la chaîne.

<< Antislash >>
Méta-caractères Détails sur les expressions régulières Accent circonflexe et Dollar
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -