Recherche, dans un texte, des sous-chaînes qui correspondent à un modèle d'expression régulière.
StringRegExp ( $sText, $sPattern [, $iMode = 0 [, $iStart = 1]] )
$sText | Texte dans lequel effectuer la recherche |
$sPattern | Chaîne contenant le critère de recherche, appelé modèle. Voir Remarques. |
$iMode | [optionnel] Mode de recherche. Voir 'Valeur de retour' pour la description des différents modes et la valeur de retour de la fonction dans chaque mode. $STR_REGEXPMATCH (0) - mode par défaut $STR_REGEXPARRAYMATCH (1) $STR_REGEXPARRAYFULLMATCH (2) $STR_REGEXPARRAYGLOBALMATCH (3) $STR_REGEXPARRAYGLOBALFULLMATCH (4) Les constantes sont définies dans StringConstants.au3 |
$iStart | [optionnel] Position dans le texte où démarre la recherche. La valeur par défaut est 1. |
Succès: | Retourne 1 si une concordance est trouvée, 0 sinon. |
Échec: | Retourne 0 et @error = 2 si le modèle est erroné. @Extended contient la position de l'erreur dans le modèle. |
Succès: | Retourne le tableau des groupes capturés. |
Échec: | @error = 1 Tableau invalide : aucune concordance trouvée. @error = 2 Modèle erroné: tableau invalide. @extended contient la position de l'erreur dans le modèle. |
Succès: | Retourne un tableau valide |
Échec: | @error = 1 Tableau invalide : aucune concordance trouvée. @error = 2 Modèle erroné: tableau invalide. @extended contient la position de l'erreur dans le modèle. |
Succès: | Retourne un tableau de résultats globaux pour le texte. |
Échec: | @error = 1 Tableau invalide : aucune concordance trouvée. @error = 2 Modèle erroné: tableau invalide. @extended contient la position de l'erreur dans le modèle. |
Succès: | Retourne un tableau de tableaux. |
Échec: | @error = 1 Tableau invalide : aucune concordance trouvée. @error = 2 Modèle erroné: tableau invalide. @extended contient la position de l'erreur dans le modèle. |
(*CR) | Carriage return (@CR). |
(*LF) | Line feed (@LF). |
(*CRLF) | Carriage return immédiatement suivi de linefeed (@CRLF). |
(*ANYCRLF) | Toute séquence @CRLF, @CR ou @LF. Ceci est la convention de saut de ligne par défaut. |
(*ANY) | Une des séquences de saut de ligne Unicode : @CRLF, @LF, VT, FF, @CR ou \x85. |
(*BSR_ANYCRLF) | Par défaut \R représente @CRLF, @CR ou @LF. |
(*BSR_UNICODE) | Change la signification de \R pour concorder avec toute séquence de saut de ligne Unicode : @CRLF, @LF, VT, FF, @CR ou \x85. |
(?i) | Insensibilité à la casse : les comparaisons deviennent insensibles à la casse à partir de ce point. Par défaut, les comparaisons sont sensibles à la casse. Quand l'option UCP est activée elle s'applique à l'ensemble du plan Unicode 0, sinon elle s'applique par défaut seulement aux lettres ASCII A-Z et a-z. |
(?m) | Multiligne : ^ et $ concordent soit au début (resp. à la fin) du texte, soit à la position précédant (resp. suivant) une séquence de saut de ligne. Par défaut, l'option multiligne est désactivée. |
(?s) | Mono-ligne ou DotAll: . concorde à tout caractère, y compris une séquence de saut de ligne. L'option DotAll est désactivée par défaut, ainsi . ne concorde pas à une séquence de saut de ligne. |
(?U) | Paresseux : les quantificateurs deviennent paresseux (non gourmands) à partir de ce point. Par défaut, la recherche est gourmande - voir ci-dessous pour plus de détails. |
(?x) | Étendu : les espaces blancs à l'extérieur des classes de caractères sont ignorés et # démarre un commentaire jusqu'au prochain caractère Newline dans le modèle. L'espacement des éléments rend les expressions régulières beaucoup plus lisibles. Par défaut, les espaces blancs et # sont interprétés littéralement. |
\a | Représente "alarm", le caractère BEL (Chr(7)). |
\cX | Représente "contrôle-X", où X représente tout caractère ASCII 7 bits. Par exemple, "\cM" représente ctrl-M, aussi représentable par \x0D ou \r (Chr(13)). |
\e | Représente le caractère de contrôle "échappement" (Chr(27)). Ne pas confondre avec l'échappement (escaping) d'un caractère! |
\f | Représente "formfeed" (Chr(12)). |
\n | Représente "linefeed" (@LF, Chr(10)). |
\r | Représente "carriage return" (@CR, Chr(13)). |
\t | Représente "tab" (@TAB, Chr(9)). |
\ddd | Représente un caractère de code octal ddd, OU une référence arrière au groupe capturant numéro ddd (en décimal). Par exemple, ([a-z])\1 représente une minuscule doublée. À éviter soigneusement à cause de cette ambiguité ! Utiliser de préférence les représentations hexadécimales ci-dessous. |
\xhh | Représente un caractère Unicode en hexadécimal hh : "\x7E" représente un tilde, "~". |
\x{hhhh} | Représente un caractère Unicode en héxadécimal hhhh : "\x{20AC}" représente le symbole de l'Euro, "€" (ChrW(0x20AC)). |
\x | où x est non-alphanumérique, représente un caractère x littéral. C'est l'échappement du caractère x. Utilisé pour représenter les méta-caractères littéraux : "\.\[" représente un point suivi d'un crochet ouvrant, ".[". |
\Q ... \E | Séquence verbatim : les méta-caractères perdent leur signification spéciale entre \Q et \E : "\Q(.)\E" recherche la chaîne "(.)" et est bien plus lisible que le modèle équivalent "\(\.\)" . |
. | Représente tout caractère Unicode excepté une séquence de saut de ligne. Représente tout caractère Unicode lorsque l'option (?s) est active. |
\d | Représente tout chiffre décimal (n'importe quel chiffre décimal Unicode de n'importe quel langage quand UCP est activé). |
\D | Représente tout caractère qui n'est pas un chiffre. |
\h | Représente à tout caractère d'espacement horizontal (voir tableau ci-dessous). |
\H | Représente à tout caractère hors espacements horizontal. |
\N | Représente à tout caractère sauf à une séquence de saut de ligne, indépendamment de l'option (?s). |
\p{ppp} | Seulement quand l'option UCP est activée : représente tout caractère Unicode possédant la propriété ppp. Par exemple, "\b\p{Cyrillic}+" représente tout mot cyrillique ; "\p{Sc}" représente tout symbole monétaire. Consultez la documentation de référence pour plus de détails. |
\P{ppp} | Seulement quand l'option UCP est activée : représente tout caractère Unicode ne possédant pas la propriété ppp. |
\R | Représente toute séquence 'newline' Unicode par défaut, ou avec le paramètre (*BSR_...) actif. Par défaut \R équivaut à "(?>\r\n|\n|\r)" où "(?>...)" est un groupe atomique, entité qui rend la séquence "\r\n" (@CRLF) indivisible. |
\s | Représente tout caractère d'espacement (voir tableau ci-dessous). |
\S | Représente tout caractère hors espacements. |
\v | Représente tout caractère d'espacement vertical (voir tableau ci-dessous). |
\V | Représente tout caractère hors espacement vertical. |
\w | Représente tout caractère 'mot' : tout chiffre, lettre ou soulignement (underscore "_"). Tout chiffre, lettre Unicode de tout langage ou soulignement (underscore "_") quand UCP est activé. |
\W | Représente tout caractère qui n'est pas 'mot'. |
\X | Seulement quand UCP est activé : représente tout graphème étendu Unicode - une séquence indivisible de codes qui représente un seul caractère pour l'utilisateur. En conséquence, \X peut retrésenter plus d'un caractère dans la chaîne d'origine, contrairement à tous les autres éléments de ce tableau. |
[ ... ] | Représente tout caractère d'un ensemble explicite : "[aeiouy]" représente toute voyelle minuscule. Un ensemble contigu (en Unicode le code définit un ordre) peut être défini en plaçant un trait d'union entre les caractères de départ et de fin : "[a-z]" représente toute lettre ASCII minuscule. Pour inclure un tiret (-) dans l'ensemble, placez-le au début ou à la fin de l'ensemble, ou utilisez l'échappement (\-). Notez que le modèle "[A-z]" est distinct de "[A-Za-z]" : ce dernier équivaut à "[A-Z\[\\\]^_`a-z]". Pour inclure un crochet fermant dans l'ensemble, placez-le en première position de l'ensemble ou utilisez l'échappement : "[][]" ou encore "[\[\]]" correspond à "[" ou "]". Notez que dans une classe de caractère, seules les séquences \d, \D, \h, \H, \p{}, \P{}, \s, \Q...\E, \S, \v, \V, \w, \W, et \x conservent leur signification spéciale, tandis que \b désigne le caractère retour arrière (Chr(8)). |
[^ ... ] | Complémentation d'une classe : représente tout caractère qui n'est pas dans l'ensemble : "[^0-9]" représente tout caractère qui n'est pas un chiffre décimal ASCII. Pour inclure un caret (^) dans un ensemble, placez-le ailleurs qu'en première position de l'ensemble ou utilisez l'échappement (\^). |
[:alnum:] | Lettres et chiffres ASCII 7 bits (équivaut à [^\W_] ou encore [A-Za-z0-9]). Quand UCP est activé : lettres et chiffres Unicode (équivaut à [^\W_] ou \p{Xan}). |
[:alpha:] | Lettres ASCII (équivaut à [^\W\d_] ou [A-Za-z]). Quand UCP est activé : lettres Unicode (équivaut à [^\W\d_] ou \p{L}). |
[:ascii:] | Caractères ASCII 7 bits (équivaut à [\x00-\x7F]). |
[:blank:] | Espacement horizontal (équivaut à \h ou [\x09\x20]). Quand UCP est activé : espacement horizontal Unicode (équivaut à \h). |
[:cntrl:] | Caractères de contrôle ASCII (équivaut à Chr(0) ... Chr(31) et Chr(127)). |
[:digit:] | Chiffres décimaux ASCII (équivaut à \d ou [0-9]). Quand UCP est activé : chiffres décimaux Unicode (équivaut à \d or \p{Nd}). |
[:graph:] | Caractères ASCII imprimables hors espacements (équivaut à Chr(33) ... Chr(126)). |
[:lower:] | Lettres minuscules ASCII 7 bits (équivaut à [a-z]). Quand UCP est activé : lettres minuscules Unicode (équivaut à \p{Ll}). |
[:print:] | Caractères ASCII imprimables ASCII 7 bits, y compris espacements (équivaut à Chr(32) ... Chr(126)). |
[:punct:] | Caractères de ponctuation ASCII, [:print:] sauf [:alnum:] et Espace, (33-47, 58-64, 91-96, 123-126). |
[:space:] | Espacements ASCII (équivaut à [\h\x0A-\x0D]). [:space:] n'est pas tout à fait équivalant à \s car il inclut VT, Chr(11)). |
[:upper:] | Lettres majuscules ASCII 7 bits (équivaut à [A-Z]). Quand UCP est activé : lettres majuscules Unicode (équivaut à \p{Lu}). |
[:word:] | Caractères 'mot' ASCII 7 bits (équivaut à \w or [[:alnum:]_]). Quand UCP est activé : caractères 'mot' Unicode (équivaut à \w ou [[:alnum:]_] ou \p{Xwd}). |
[:xdigit:] | Chiffres hexadécimaux (équivaut à [0-9A-Fa-f]). |
( ... ) | Groupe capturant. Les éléments d'un groupe sont traités dans l'ordre et peuvent être répétés comme un bloc. Par exemple, "(ab)+c" trouvera "abc" or "ababc", mais pas "abac". Un groupe capturant enregistre le texte auquel il a concordé et ce contenu est utilisable par référence arrière. Ce contenu se retrouve dans le tableau renvoyé dans certains modes. Les groupes capturant sont numérotés à partir de 1 dans l'ordre d'apparition de leur parenthèse ouvrante. Les groupes capturant peuvent également être considérés comme des sous-routines, référençables ailleurs dans le modèle, éventuellement de manière récursive. |
(?<nom> ... ) | Groupe de capture nommé. Peut être appelé plus tard par son nom aussi bien que par son numéro. Évitez d'utiliser le nom "DEFINE" (voir "Modèles conditionnels"). |
(?: ... ) | Groupe non-capturant. N'enregistre pas le texte auquel il a concordé et n'est pas numéroté ; ne peut donc pas être réutilisé par référencence arrière. |
(?| ... ) | Groupe non-capturant avec réemploi. Affecte le même numéro à tous les groupes capturant de premier niveau figurant dans les alternatives de ce groupe : "(?|(Lu)ndi|(Ma)rdi|(Me)rcredi|(Je)udi|(Ve)ndredi|(Sa)medi|(Di)manche)" représente un nom de jour de la semaine et capture son abréviation dans le groupe numéro 1. |
(?> ... ) | Groupe atomique non-capturant : traite le contenu auquel il concorde comme une entité indivisible (voir aussi Quantificateurs et gourmandise ci-dessous). Les groupes atomiques, comme les quantifications possessives, sont toujours gourmands. |
(?# ... ) | Groupe commentaire : toujours ignoré (mais ne peut pas contenir une parenthèse fermante donc les commentaires de groupes ne sont pas emboîtables). |
? | 0 ou 1, gourmand. |
?+ | 0 ou 1, possessif. |
?? | 0 ou 1, frugal. |
* | 0 ou plus, gourmand. |
*+ | 0 ou plus, possessif. |
*? | 0 ou plus, frugal. |
+ | 1 ou plus, gourmand. |
++ | 1 ou plus, possessif. |
+? | 1 ou plus, frugal. |
{x} | exactement x. |
{x,y} | au moins x et au plus y, gourmand. |
{x,y}+ | au moins x et au plus y, possessif. |
{x,y}? | au moins x et au plus y, frugal. |
{x,} | x ou plus, gourmand. |
{x,}+ | x ou plus, possessif. |
{x,}? | x ou plus, frugal. |
X|Y | Représente l'une des alternatives X ou Y: "ac|dc|ground" représente "ac" ou "dc" ou "ground". |
\n | Référence au numéro absolu d'un groupe précédemment capturé. ATTENTION: si aucun groupe numéroté n n'existe, cet élément est évalué comme le caractère de valeur n si n est une valeur octale valide, sinon d'autres erreurs apparaissent. En raison de cette ambiguïté, cette formulation est à utiliser avec précaution. Favorisez les formes suivantes pour une meilleure sécurité sémantique. |
\gn | Référence au numéro absolu d'un groupe précédemment capturé. |
\g{n} | Référence au numéro absolu d'un groupe précédemment capturé. Similaire au précédent mais délimite clairement n : impérative lorsque les caractères qui suivent sont des chiffres. |
\g-n | Référence au numéro relatif d'un groupe précédemment capturé. |
\k<nom> | Référence au nom d'un groupe précédemment capturé. |
(?R) ou (?0) | Récursivité vers l'expression régulière entière. |
(?n) | Appelle un sous-modèle par son numéro absolu. |
(?+n) | Appelle un sous-modèle par son numéro relatif. |
(?-n) | Appelle un sous-modèle par son numéro relatif. |
(?&nom) | Appelle un sous-modèle par son nom. |
^ | En dehors d'une classe de caractère, ce test est satisfait si la position courante est le début du sujet, mais également après une séquence de saut de ligne non-finale si l'option (?m) est active. Par défaut, la séquence de saut de ligne est soit @CRLF, soit @CR ou @LF isolés. Dans une classe de caractères, un caret ^ complémente la classe (exclut les caractères qu'elle représente) s'il figure en première position, concorde littéralement s'il se trouve dans une autre position. |
$ | En dehors d'une classe de caractères, ce test est satisfait si la position courante est à la fin du texte, mais également avant une séquence de saut de ligne si l'option (?m) est active. Dans une classe de caractères, $ représente le signe dollar lui-même. |
\A | Test satisfait si la position courante est le début du texte, indépendamment de l'option multiligne (?m). Échoue forcément si $iStart n'est pas 1. |
\G | Test satisfait si la position courante est la première concordance trouvée dans le texte. |
\z | Test satisfait si la position courante est à la fin du texte, indépendamment de l'option multiligne (?m). |
\Z | Test satisfait si la position courante est à la fin du texte ou avant une séquence de saut de ligne, indépendamment de l'option multiligne (?m). |
\b | Test satisfait si la position courante est à la limite d'un 'mot', soit entre des caractères non tous deux \w ou \W. Voir \w pour la signification de 'mot'. Dans une classe de caractères, \b est le caractère de contrôle retour arrière (Chr(8)). |
\B | Test satisfait si la position courante n'est pas à la limite d'un 'mot'. |
(?=X) | Look-ahead positif : test satisfait si le sous-modèle X concorde à partir de la position courante. |
(?!X) | Look-ahead négatif : test satisfait si le sous-modèle X ne concorde pas à partir de la position courante. |
(?<=X) | Look-behind positif : test satisfait si le sous-modèle X concorde avec les caractères qui précèdent la position courante. Le modèle X doit concorder avec une chaîne de longueur bornée, c'est-à-dire ne pas utiliser de quantificateurs indéfinis * + ou ? ou leurs équivalents. |
(?<!X) | Look-behind négatif : test satisfait si le sous-modèle X ne concorde pas aux caractères qui précédent la position courante. Le modèle X doit concorder avec une chaîne de longueur bornée, c'est-à-dire ne pas utiliser de quantificateurs indéfinis * + ou ? ou leurs équivalents. |
\K | Ré-initialise le démarrage de la recherche au point courant du sujet. Notez que les groupes déjà capturés sont conservés dans le tableau renvoyé ; il est donc toujours possible d'y faire référence plus tard. L'action de \K est similaire mais non identique à un look-behind, en ce que \K permet de travailler avec un sous-modèle de longueur non bornée. |
(?(condition)modèle_si_vrai) | Permet une exécution conditionnelle de modèle_si_vrai. |
(?(condition)modèle_si_vrai|modèle_si_faux) | Applique l'un des modèles suivant le résultat de (condition). |
(n) | Teste si le groupe de capture de numéro absolu n permet la concordance. |
(+n) | Teste si le groupe de capture de numéro relatif +n permet la concordance. |
(-n) | Teste si le groupe de capture de numéro relatif -n permet la concordance. |
(<nom>) | Teste si le groupe de capture nommé nom permet la concordance. |
(R) | Teste si une quelconque récurrence s'est produite. |
(Rn) | Teste si la plus récente récurrence portait sur la capture par le groupe de numéro absolu n. |
(R&name) | Teste si la plus récente récurrence portait sur la capture par le groupe de nom name. |
(DEFINE) | Utilisée sans modèle_si_faux : permet la définition d'un sous-programme nommé utilisable par ailleurs. "(?x) (?(DEFINE) (?<octet> 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) )" définit un sous-programme nommé "octet" qui permet une concordance avec un composant numérique d'adresse IPv4. Ensuite, une adresse réelle peut être recherchée par "\b (?&byte) (\.(?&byte)){3} \b". |
(assertion) | Ici assertion est une assertion positive ou negative, look-ahead ou look-behind. |
(?J) | Permet d'assigner un même nom à plusieurs groupes ou sous-programme (non détaillé ici). |
(?X) | Les éléments hors contexte provoquent une erreur, au lieu d'être ignorés. |
(*J) | Autorise une compatibilité partielle avec les expressions régulières Javascript (non détaillé ici). |
(*LIMIT_MATCH=n) | Limite à n le nombre de concordances trouvées. |
(*LIMIT_RECURSION=n) | Limite la récursion à n niveaux. |
(*NO_START_OPT) | Désactive plusieurs optimisations (non détaillé ici). |
(*ACCEPT) | Force le succès immédiat de la concordance dans le sous-programme en cours ou dans le modèle de premier niveau. |
(*FAIL) ou (*F) | Force l'échec immédiat de la recherche. |
(*MARK:nom) or (*:nom) | (Voir la documentation de référence.) |
(*COMMIT) | (Voir la documentation de référence.) |
(*PRUNE) | (Voir la documentation de référence.) |
(*PRUNE:name) | (Voir la documentation de référence.) |
(*SKIP) | (Voir la documentation de référence.) |
(*SKIP:name) | (Voir la documentation de référence.) |
(*THEN) | (Voir la documentation de référence.) |
(*THEN:name) | (Voir la documentation de référence.) |
StringInStr, StringRegExpReplace
; == Mode 0: REGEXPMATCH ; Retourne 1 si une première concordance a été trouvée, sinon 0 #include <MsgBoxConstants.au3> #include <StringConstants.au3> Global $sujet, $regex, $iResult $sujet = "Aujourd'hui, on est Dimanche" $regex = "\bDi" ; Critère: mot commençant par "Di" $iResult = StringRegExp($sujet, $regex, $STR_REGEXPMATCH) MsgBox($MB_SYSTEMMODAL, "Mode 0", ($iResult = 1 ? "Trouvé" : "Non trouvé"))
; == Mode 1: REGEXPARRAYMATCH ; Retourne le tableau des groupes capturés pour la première concordance ; Si aucun groupe n'est capturé, retourne le résultat complet de la concordance en [0] #include <MsgBoxConstants.au3> #include <StringConstants.au3> #include <Array.au3> Global $sujet, $regex, $aArray $sujet = "Dimanche Lundi Mardi Mercredi" $regex = "\b\w+di\b" ; Mot se terminant par 'di' et aucun groupe capturé $aArray = StringRegExp($sujet, $regex, $STR_REGEXPARRAYMATCH) _ArrayDisplay($aArray, "Mode 1 - sans capture") $regex = "\b(\w+)(di)\b" ; Mot se terminant par 'di' et deux groupes capturés $aArray = StringRegExp($sujet, $regex, $STR_RegExpArrayMatch) _ArrayDisplay($aArray, "Mode 1 - deux captures")
; == Mode 1: REGEXPARRAYMATCH ; Utilisation du paramètre $iStart pour boucler sur les concordances #include <MsgBoxConstants.au3> #include <StringConstants.au3> #include <Array.au3> Global $sujet, $regex, $aArray, $iStart $sujet = "Dimanche Lundi Mardi Mercredi" $regex = "(\b\w+)(di)\b" ; Mot se terminant par 'di' et deux groupes capturés $aArray = StringRegExp($sujet, $regex, $STR_REGEXPARRAYMATCH) While @error = 0 $iStart = @extended _ArrayDisplay($aArray, "Mode 1") $aArray = StringRegExp($sujet, $regex, $STR_REGEXPARRAYMATCH, $iStart) WEnd
; == Mode 2: REGEXPARRAYFULLMATCH (retour simple, style php/preg_match()) ; Cherche la première concordance et retourne un tableau avec le résultat complet en [0] ; suivi des groupes de capture en [1], [2], ... #include <MsgBoxConstants.au3> #include <StringConstants.au3> #include <Array.au3> Global $sujet, $regex, $aArray $sujet = "Dimanche Lundi Mardi Mercredi" $regex = "\b(\w+)(di)\b" $aArray = StringRegExp($sujet, $regex, $STR_REGEXPARRAYFULLMATCH) _ArrayDisplay($aArray, "Mode 2")
; == Mode 3 : REGEXPARRAYGLOBALMATCH (retour global, style ancien AutoIt) ; Retourne le tableau des groupes capturés de TOUTES les concordances #include <Array.au3> #include <StringConstants.au3> #include <Array.au3> Global $sujet, $regex, $aArray $sujet = "Dimanche Lundi Mardi Mercredi" $regex = "\b(\w+)(di)\b" $aArray = StringRegExp($sujet, $regex, $STR_REGEXPARRAYGLOBALMATCH) _ArrayDisplay($aArray, "Mode 3")
; == Mode 4 : REGEXPARRAYGLOBALFULLMATCH (retour global, style php/preg_match_all()) ; Retourne un tableau avec autant d'éléments que de concordances ; Chaque élément est lui-même un tableau contenant la concordance complète ainsi que les groupes capturés. #include <Array.au3> #include <StringConstants.au3> #include <Array.au3> Global $sujet, $regex, $aConcordance, $aArray $sujet = "Dimanche Lundi Mardi Mercredi" $regex = "\b(\w+)(di)\b" $aConcordance = StringRegExp($sujet, $regex, $STR_REGEXPARRAYGLOBALFULLMATCH) for $i=0 to UBound($aConcordance)-1 $aArray = $aConcordance[$i] _ArrayDisplay($aArray, "Mode 4 - retour global") Next