Expressions régulières - Exemple
Expressions simples
La forme la plus simple d'une expression régulière est un seul caractère ordinaire qui correspond à lui-même dans une chaîne de recherche. Par exemple, un modèle à un seul caractère tel que A correspondra toujours à la lettre A, quel que soit son emplacement dans la chaîne de recherche. Voici quelques exemples de modèles d'expressions régulières à un seul caractère :
/a/ /7/ /M/
peut combiner de nombreux caractères uniques pour former de grandes expressions. Par exemple, l'expression régulière suivante combine les expressions à un seul caractère : a, 7 et M.
/a7M/
Notez qu'il n'y a pas d'opérateur de concaténation. Tapez simplement un caractère après l’autre.
Correspondance de caractères
Période (.) Correspond à chaque caractère imprimable ou non imprimable de la chaîne à une exception près. L'exception est le caractère de nouvelle ligne (n). L'expression régulière suivante correspond à aac, abc, acc, adc, etc., ainsi qu'à a1c, a2c, a-c et a#c :
/a.c/
Pour faire correspondre une chaîne contenant un nom de fichier et un point (.) est Pour saisir un composant d'une chaîne, faites précéder le point dans l'expression régulière d'une barre oblique inverse (). Pour illustrer, les expressions régulières suivantes correspondent à filename.ext :
/filename\.ext/
Ces expressions vous permettent uniquement de faire correspondre "n'importe quel" caractère unique. Il peut être nécessaire de faire correspondre des groupes spécifiques de caractères dans une liste. Par exemple, vous souhaiterez peut-être rechercher les titres numériques des chapitres (Chapitre 1, Chapitre 2, etc.).
Expressions entre crochets
Pour créer une liste de groupes de caractères correspondants, placez un ou plusieurs caractères simples entre crochets ([ et ]). Lorsque les caractères sont mis entre parenthèses, la liste est appelée une « expression entre parenthèses ». Un caractère ordinaire se représente entre crochets comme dans toute autre position, c'est-à-dire qu'il se correspond une fois dans le texte saisi. La plupart des caractères spéciaux perdent leur signification lorsqu’ils apparaissent entre crochets. Il existe quelques exceptions, telles que :
Si le caractère ] n'est pas le premier élément, il termine une liste. Pour faire correspondre le caractère ] dans une liste, placez-le en premier, immédiatement après l'ouverture [. Les personnages
continuent d'agir comme des personnages d'évasion. Pour faire correspondre les caractères, utilisez \.
Les caractères placés entre crochets ne correspondent qu'à un seul caractère à cette position dans l'expression régulière. L'expression régulière suivante correspond au chapitre 1, au chapitre 2, au chapitre 3, au chapitre 4 et au chapitre 5 :
/Chapter [12345]/
Notez que la position du mot Chapitre et l'espace suivant sont fixes par rapport aux caractères entre crochets . L'expression entre crochets spécifie un jeu de caractères qui correspond uniquement à la position d'un seul caractère immédiatement après le mot Chapitre et un espace. Il s'agit de la neuvième position du personnage.
Pour utiliser une plage au lieu des caractères eux-mêmes pour représenter un groupe de caractères correspondant, utilisez un trait d'union (-) pour séparer les caractères de début et de fin de la plage. La valeur d'un caractère unique détermine l'ordre relatif dans la plage. L'expression régulière suivante contient une expression de plage équivalente à la liste entre crochets présentée ci-dessus.
/Chapter [1-5]/
Lorsqu'une plage est spécifiée de cette façon, les valeurs de début et de fin sont incluses dans la plage. Notez qu'il est également important de noter que la valeur de début doit précéder la valeur de fin dans l'ordre de tri Unicode.
Pour inclure un trait d'union dans une expression entre crochets, utilisez l'une des méthodes suivantes :
Échappez-le avec une barre oblique inverse :
[\-]
Mettez un trait d'union au début ou à la fin de la liste des parenthèses. L'expression suivante correspond à toutes les lettres minuscules et traits d'union :
[-a-z] [a-z-]
Crée une plage dans laquelle la valeur du caractère de début est inférieure au trait d'union et la valeur du caractère de fin est égale ou supérieure au trait d'union. . Les deux expressions régulières suivantes satisfont à cette exigence :
[!--] [!-~]
Pour rechercher tous les caractères qui ne figurent pas dans une liste ou une plage, placez le caret (^) au début de la liste . Si le curseur apparaît ailleurs dans la liste, il correspond à lui-même. L'expression régulière suivante correspond à n'importe quel nombre et caractère autre que 1, 2, 3, 4 ou 5 :
/Chapter [^12345]/
Dans l'exemple ci-dessus, l'expression correspond à 1, 2, 3, à tout nombre et caractère autre que 4 ou 5. Ainsi, par exemple, le chapitre 7 est une correspondance, et le chapitre 9 est également une correspondance.
L'expression ci-dessus peut être représentée à l'aide d'un trait d'union (-) :
/Chapter [^1-5]/
Une utilisation typique des expressions entre crochets consiste à spécifier une correspondance pour n'importe quelle lettre majuscule ou minuscule ou n'importe quel chiffre. L'expression suivante spécifie une telle correspondance :
/[A-Za-z0-9]/
Remplacement et regroupement
Le remplacement utilise le caractère | pour permettre la sélection entre deux ou plusieurs options de remplacement. Par exemple, une expression régulière de titre de chapitre peut être étendue pour renvoyer une gamme de correspondances plus large que les titres de chapitre. Cependant, ce n’est pas aussi simple qu’on pourrait le penser. Le remplacement correspond à la plus grande expression de chaque côté du caractère |.
Vous pourriez penser que l'expression suivante correspond à un chapitre ou une section qui apparaît au début et à la fin d'une ligne, suivi d'un ou deux chiffres :
/^Chapter|Section [1-9][0-9]{0,1}$/
Malheureusement, l'expression régulière ci-dessus correspond soit le mot Chapitre en début de ligne, soit le mot Section en fin de ligne et les chiffres qui le suivent. Si la chaîne d'entrée est le chapitre 22, alors l'expression ci-dessus correspond uniquement au mot Chapitre. Si la chaîne d'entrée est la section 22, alors cette expression correspond à la section 22.
Pour rendre l'expression régulière plus gérable, vous pouvez utiliser des parenthèses pour limiter la portée du remplacement, c'est-à-dire vous assurer qu'il ne s'applique qu'aux deux mots Chapitre et Section. Cependant, les parenthèses sont également utilisées pour créer des sous-expressions et éventuellement les capturer pour une utilisation ultérieure, comme indiqué dans la section sur les références arrière. Vous pouvez faire correspondre l'expression régulière au chapitre 1 ou à la section 3 en ajoutant des parenthèses aux endroits appropriés dans l'expression régulière ci-dessus.
Les expressions régulières suivantes utilisent des parenthèses pour combiner Chapitre et Section afin que les expressions fonctionnent correctement :
/^(Chapter|Section) [1-9][0-9]{0,1}$/
Bien que ces expressions fonctionnent correctement, les parenthèses autour de Chapitre|Section captureront également l'un ou l'autre des deux. mots correspondants pour une utilisation ultérieure. Puisqu’il n’y a qu’un seul jeu de parenthèses dans l’expression ci-dessus, une seule « sous-correspondance » est capturée.
Dans l'exemple ci-dessus, il vous suffit d'utiliser des parenthèses pour combiner les mots Chapitre et Section. Pour éviter que les correspondances ne soient enregistrées pour une utilisation ultérieure, placez ?: avant le modèle d'expression régulière entre crochets. La modification suivante offre la même capacité sans enregistrer les sous-correspondances :
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/
En plus du métacaractère ?:, deux autres métacaractères non capturants créent ce qu'on appelle une correspondance "lookahead". L'anticipation est spécifiée à l'aide de ?= , qui correspond à la chaîne de recherche au point de départ du modèle d'expression régulière correspondant entre parenthèses. L'anticipation vers l'arrière est spécifiée à l'aide de ?!, qui correspond à la chaîne de recherche au début d'une chaîne qui ne correspond pas au modèle d'expression régulière.
Par exemple, supposons que vous disposiez d'un document contenant des références à Windows 3.1, Windows 95, Windows 98 et Windows NT. Supposons en outre que vous deviez mettre à jour le document pour remplacer toutes les références à Windows 95, Windows 98 et Windows NT par Windows 2000. L'expression régulière suivante (qui est un exemple de prédiction directe) correspond à Windows 95, Windows 98 et Windows NT :
/Windows(?=95 |98 |NT )/
Une fois qu'une correspondance est trouvée, elle est suivie du caractère de texte correspondant (à l'exclusion des prédictions) dans la ligne précédente), puis recherchez la correspondance suivante. Par exemple, si l'expression ci-dessus correspond à Windows 98, la recherche se poursuivra après Windows au lieu d'après 98.
Autres exemples
Vous trouverez ci-dessous quelques exemples d'expressions régulières :
正则表达式 | 描述 |
---|---|
/b([a-z]+) 1b/gi | 一个单词连续出现的位置。 |
/(w+)://([^/:]+)(:d*)?([^# ]*)/ | 将一个URL解析为协议、域、端口及相对路径。 |
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ | 定位章节的位置。 |
/[-a-z]/ | A至z共26个字母再加一个-号。 |
/terb/ | 可匹配chapter,而不能匹配terminal。 |
/Bapt/ | 可匹配chapter,而不能匹配aptitude。 |
/Windows(?=95 |98 |NT )/ | 可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后,从Windows后面开始进行下一次的检索匹配。 |
/^s*$/ | 匹配空行。 |
/d{2}-d{5}/ | 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。 |
/<s*(S+)(s[^>]*)?>[sS]*<s*/1s*>/ | 匹配 HTML 标记。 |