| Bulgarian English French
GermanRussian Spanish |
| A propos | Installation | Syntaxe | Interface | FAQ | Demos | Auteur |
|
Syntaxe des Expressions Régulières
Introduction Les Expressions Régulières sont grandement utilisées pour spécifier des type de recherches pour le texte. Les métacaractères spéciaux vous permettent de spécifier, par exemple, qu'une chaîne particulière que vous chercher se trouve au début ou à la fin d'une ligne, ou contient n récurrence d'un certain caractère. Les Expressions Régulières ressemblent vraiment à du charabia pour les débutants, mais elles sont réellement simples (bien, habituellement), et sont un outil pratique et puissant. Je recommande fortement de vous amuser avec le demo TestRExp.dpr - il vous aidera à comprendre le concept principal. De plus, il y a plusieurs exemple prédéfinis avec des commentaires inclus dans TestRExp. Commençons notre voyage d'apprentissage! Simple comparaison Un simple se compare à lui-même, sauf s'il est un métacaractère avec une spécification spéciale décris plus bas. Une série de caractère se compare à la même série de caractère dans la chaîne de destination, aussi le gabarit "bluh" se compare à "bluh'' dans la chaîne de destination. Relativement simple, n'est-ce pas ? Vous pouvez obliger les métacaractères ou les Séquences d'échappements à être interprétés littéralement avec un 'échappement' en les précédents avec une barre oblique inverse "\", par exemple: le métacaractère "^" normalement se compare au début de ligne, mais "\^" se compare au caractère "^", "\\" se compare à "\" et ainsi de suite. Exemples:
Séquences d'Échappements Les caractères peuvent être spécifiés avec une Séquence d'Échappement comme celles utilisé dans le langage C et Perl: "\n'' se compare à une nouvelle ligne, "\t'' à une tabulation, etc... Plus généralement, \xnn, où nn est un nombre hexadécimal, se compare aux caractères ASCII avec une valeur dans nn. Si vous avez besoin des caractères large (wide, ou Unicode), vous pouvez utiliser '\x{nnnn}', d'où 'nnnn' - un nombre de plus ou moins 4 caractères numérique hexadécimal. \xnn caractère hexa avec le code nn. \x{nnnn} caractère hexa avec un code nnnn (un octet pour le texte ordinaire et 2 octets pour l'Unicode). \t Tabulation horizontale (HT/TAB), même chose que \x09. \n Nouvelle ligne (NL), même chose que \x0a. \r Retour de chariot (CR), même chose que \x0d. \f Avance page (FF), même chose que \x0c. \a Alarme (bell) (BEL), même chose que \x07. \e Échappement (ESC), même chose que \x1b. Exemples:
Classes de Caractères Vous pouvez spécifier une Classe de caractères, en insérant une liste de caractères dans [], lequel comparera tous les caractères inclus dans la liste. Si le premier caractère après "['' est "^'', la classe se compare comme une négation en comparant tous les caractères qui ne sont pas dans la liste. Exemples:
Dans une liste, le caractère "-'' est utilisé pour spécifier une distance (range), aussi a-z représente tous les caractères entre ''a'' et "z'', inclusivement. Si vous voulez que "-'' soit membre de la classe, veuillez le mettre au début ou à la fin de la liste, ou encore placer un échappement ("\") devant. Si vous voulez un ']' vous pouvez le placer au début de la liste ou le placer avec un échappement "\". Exemples:
Métacaractères Les Métacaractères sont des caractères spéciaux qui sont l'essence même des expressions régulières. Il y a différents types de métacaractères, décris plus bas. Métacaractères - Séparateurs de ligne
Exemples:
Le métacaractère "^" par défaut garantie de trouver le mot seulement s'il est au début de la chaîne ou du texte, le métacaractère "$" seulement à la fin. Les séparateurs de ligne inclus dans le texte ne sont pas considérés comme valable par "^'' ou "$'', donc la condition est fausse et la recherche n'est pas valide. Vous pouvez, toutefois, désirer traiter une chaîne comme une chaîne de plusieurs ligne de texte, de cette façon "^'' sera valable après le séparateur de ligne, et "$'' sera valable avant un séparateur de ligne. Vous pouvez faire ceci avec le modifier /m. Les métacaractères \A et \Z sont comme "^'' et "$'', excepté qu'ils fonctionne seulement qu'une seule fois pour tout le texte quand le modifier /m est en usage, pendant que "^'' et "$'' recherchera à chaque séparateur de ligne. Le métacaractère ".'' par défaut se compare à n'importe quel caractère, mais si vous mettez à off le modifier /s, les séparateurs de ligne ne seront plus inclus pour '.'. TRegExpr travaille avec les séparateurs de lignes comme recommandé au site web www.unicode.org ( http://www.unicode.org/unicode/reports/tr18/ ): "^" est au début de la chaîne d'entrée, et si le modifier /m est à On, aussi suivant immédiatement n'importe quelle occurrence de \x0D\x0A ou \x0A ou \x0D (si vous utiliser la Version Unicode de TRegExpr, et ensuite \x2028 ou \x2029 ou \x0B ou \x0C ou \x85). Noter qu'il n'y a pas de ligne vide dans la séquence \x0D\x0A. "$" est à la fin de la chaîne d'entrée, et si le modifier /m est à On, aussi précédant immédiatement n'importe quelle occurrence de \x0D\x0A ou \x0A ou \x0D (si vous utiliser la Version Unicode de TRegExpr, et ensuite \x2028 ou \x2029 ou \x0B ou \x0C ou \x85). Noter qu'il n'y a pas de ligne vide dans la séquence \x0D\x0A. "." se compare à n'importe quel caractère, mais si le modifier /s est a Off "." ne correspondra plus à \x0D\x0A et \x0A et \x0D (si vous utiliser la Version Unicode de TRegExpr, et ensuite \x2028 et \x2029 et \x0B et \x0C et \x85). Noter que "^.*$" (un gabarit de ligne vide) ne correspond pas à une chaîne vide, mais se compare à une chaîne vide contenant la séquence \x0A\x0D. Le traitement Multiligne peut facilement être ajusté selon vos besoins avec l'aide des propriétés LineSeparators et LinePairedSeparator de TregExpr. Vous pouvez utiliser le style Unix "\n" ou seulement le style DOS/Windows "\r\n" ou un mélange des deux (comme décris plus haut et utilisé par défaut) ou définir vos propres séparateurs! Métacactères - classes prédéfinies
Vous pouvez utiliser \w, \d et \s à l'intérieur de la classe de caractères. Exemples:
TRegExpr utilise les propriétés SpaceChars et WordChars pour définir les classes de caractères \w, \W, \s, \S, aussi vous pouvez aisément les redéfinir. Métacaractères - itérateurs N'importe quel item d'une expression régulière peut-être suivi par un autre type de métacaractère - les itérateurs. En utilisant ces métacaractères vous pouvez spécifier le nombre de fois que le caractère précédent sera représenté, métacaractères ou sous expression.
Donc, les nombres dans les accolades de la forme {n,m}, spécifie le nombre de fois minimum avec la lettre n et le nombre maximum avec la lettre m. La forme {n} est équivalente à {n,n} et correspond exactement à n fois. La forme {n,} correspond à n ou plus. Il n'y a aucune limite quand à la grosseur de n et m, mais les grands nombres prendront beaucoup plus de mémoire et vont ralentir l'exécution de l'e.r. Si les accolades apparaissent dans un autre contexte, ils sont traitées comme un caractère régulier. Exemples:
Une petite explication à propos de l'utilisation des termes "non-vorace" et "vorace". "Vorace" prend autant que possible, "non-vorace" prend aussi peu que possible. Par exemple, 'b+' et 'b*' appliqué à la chaîne 'abbbbc' retourne 'bbbb', 'b+?' retourne 'b', 'b*?' retourne une chaîne vide, 'b{2,3}?' retourne 'bb', 'b{2,3}' retourne 'bbb'. Vous pouvez changer tous les itérateurs en mode "non-vorace" en utilisant le modifier /g. Métacaractères - Alternatifs Vous pouvez spécifier des alternatifs pour le modèle en utilisant "|'' pour les séparer, donc fee|fie|foe correspond à "fee'', "fie'', ou "foe'' dans la chaîne de destination (comme f(e|i|o)e le ferait). La première alternative inclus tout du délimiteur précédent ("('', "['', ou le début du modèle) jusqu'au premier "|'', et la dernière alternative contient tout du dernier "|'' jusqu'au dernier délimiteur. Pour cette raison, il est de pratique courante d'inclure les alternatives dans des parenthèses, pour minimiser le risque de confusion pour savoir quand c'est le départ et quand c'est la fin. Les alternatifs sont évalués de gauche à droite, donc la première alternative trouvé pour la correspondance est celle qui est choisi. Ceci signifie que les alternatives ne sont pas nécessairement vorace. Par exemple : quand vous faites correspondre foo|foot à "barefoot'', seulement la partie "foo'' correspond, comme c'est la première alternative essayée, elle correspond exactement à la chaîne de destination. (Ceci ne semble pas important, mais ceci le deviens quand vous capturer du texte correspondant en utilisant les parenthèses.) Aussi rappeler vous que "|'' est interprété comme un littéral entre "[]", donc si vous écrivez [fee|fie|foe] Vous réellement rechercher pour [feio|]. Exemples: foo(bar|foo) Trouve la chaîne 'foobar' ou 'foofoo'. Métacaractères - sous expressions Les parenthèses ( ... ) peuvent aussi être utilisées pour construire des sous expression régulière. (après l'analyse, vous pouvez trouver les positions des sous expressions, longueurs et valeurs actuelles dans MatchPos, MatchLen et les propriétés de Match dans TRegExpr, et les substituer dans les chaînes du gabarit de TRegExpr.Substitute). Les Sous expressions sont numérotés de gauche à droite selon les ouvertures des parenthèses. La première sous expression à le numéro '1' (l'e.r. complète a le numéro '0' - vous pouvez le substituer dans TRegExpr.Substitute comme '$0' ou '$&'). Exemples:
Métacaractères - Références Précédentes Les Métacaractères \1 jusqu'à \9 sont interprétés comme des références précédentes. \<n> compare la sous expression #<n> précédente trouvé. Exemples: (.)\1+ Trouve 'aaaa' et 'cc'. (.+)\1+ Aussi se compare à 'abab' et '123123'. (['"]?)(\d+)\1 Trouve '"13" (entre guillemets), ou '4' (en apostrophe) ou 77 (sans guillemet ou apostrophe), etc... Modifier
Il y a plusieurs façon d'ajuster ces modifier. N'importe quel de ces modifier peuvent être incorporé dans l'expression régulière elle-même en utilisant la construction de (?...). Aussi, vous pouvez changer la propriété adéquate de TRegExpr (ModifierX par exemple pour changer /x, ou ModifierStr pour changer tous les modificateurs ensemble). Les valeurs par défaut de la nouvelle instance de l'objet TRegExpr sont définis dans les variables globales, par exemple la variable globale RegExprModifierX définie la valeur (ModifierX) d'une nouvelle instance de TRegExpr. i
Le modifier /x requiert des explications. Il dit à TRegExpr d'ignorer les espaces qui ne sont pas avec un échappement ou qui ne sont pas dans une classe. Vous pouvez utiliser ceci pour casser l'expression régulière en morceaux plus petit et plus lisible. Le caractère # est aussi traité comme un métacaractère qui introduit les commentaires, par exemple:
Ceci signifie que si vous voulez avoir des espace ou des caractères # dans le modèle (à l'extérieur de la classe, où ils ne sont pas affectés par /x), que vous aurez à mettre des échappements ou les encoder avec des valeurs octal ou hexadécimale. Pris ensemble, cette option va plus loin pour l'écriture d'expressions régulière pour les rendent plus lisible.
(?imsxr-imsxr) Vous pouvez l'utiliser dans les e.r. pour les modifier sur le champ. Si la construction est encapsulé dans une sous expression, alors seulement la sous expression sera affecté. Exemples:
(?#text) Un commentaire, le texte est ignoré. Veuillez noter que TRegExpr ferme le commentaire aussitôt qu'il voit une parenthèse ")", Aussi il n'y a aucune façon de placer une parenthèse dans le commentaire sans fermer celui-ci. Explication du mécanisme interne Vous voulez connaître les secrets interne de TRegExpr? Bien, cette section est en construction, svp veuillez attendre quelque temps.. N'oubliez pas de lire la FAQ (spécifiquement la section 'non-vorace' ou cette Question). |
![]() |