TREGEXPR DOCUMENTATION - VERSION 1.147 ANDREY SOROKIN
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
TRegExpr Documentation
Version 1.147
Andrey Sorokin
mai 04, 2022Table des matières
1 Avis 3
2 Démarrage rapide 5
3 Retour d’information 7
4 Code source 9
5 Documentation 11
5.1 Expressions régulières (RegEx) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.2 TRegExpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.3 FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.4 Démos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6 Traductions 35
7 Reconnaissance 37
iii
TRegExpr Documentation, Version 1.147
English Deutsch Français Español
La bibliothèque TRegExpr implémente des expressions régulières ‘_.
Les expressions régulières sont un outil puissant et facile à utiliser pour la recherche et la substitution sophistiquées et
pour la vérification de texte basée sur des modèles.
Il est particulièrement utile pour la validation des entrées utilisateur dans les formulaires de saisie - pour valider les
adresses électroniques, etc.
Vous pouvez également extraire des numéros de téléphone, codes postaux, etc. à partir de pages Web ou de documents,
rechercher des modèles complexes dans des fichiers journaux et tout ce que vous pouvez imaginer. Les règles (modèles)
peuvent être modifiées sans la recompilation de votre programme.
TRegExpr est implémenté en Pascal pur. Il est inclus dans Lazarus (Free Pascal) projet. Mais il existe aussi en tant que
bibliothèque séparée et peut être compilé par Delphi 2-7, Borland C ++ Builder 3-6.
Table des matières 1TRegExpr Documentation, Version 1.147 2 Table des matières
CHAPITRE 1
Avis
Comment bien la bibliothèque a été rencontré.
3TRegExpr Documentation, Version 1.147 4 Chapitre 1. Avis
CHAPITRE 2
Démarrage rapide
Pour utiliser la bibliothèque, ajoutez simplement les sources vous projetez et utilisez la classe‘ TRegExpr ‘_.
Dans la FAQ vous pouvez apprendre des problèmes des autres utilisateurs.
Prêt à exécuter l’application Windows REStudio vous aidera à apprendre et à déboguer les expressions régulières.
5TRegExpr Documentation, Version 1.147 6 Chapitre 2. Démarrage rapide
CHAPITRE 3
Retour d’information
Si vous voyez des problèmes, veuillez créer le bogue. ‘_.
7TRegExpr Documentation, Version 1.147 8 Chapitre 3. Retour d’information
CHAPITRE 4
Code source
Pure Object Pascal.
— Version originale
— Fourche FreePascal (miroir GitHub de la SubVersion)
9TRegExpr Documentation, Version 1.147 10 Chapitre 4. Code source
CHAPITRE 5
Documentation
English Deutsch Français Español
5.1 Expressions régulières (RegEx)
5.1.1 introduction
Les expressions régulières sont un moyen pratique de spécifier des modèles de texte.
Avec les expressions régulières, vous pouvez valider la saisie de l’utilisateur, rechercher des modèles tels que les
adresses électroniques de numéros de téléphone sur des pages Web ou dans certains documents, etc.
Below is the complete regular expressions cheat sheet.
5.1.2 Personnages
Matchs simples
Any single character (except special regex characters) matches itself. A series of (not special) characters matches that
series of characters in the input string.
RegEx Allumettes
foobar foobar
Caractères non imprimables (codes d’échappement)
To specify character by its Unicode code, use the prefix \x followed by the hex code. For 3-4 digits code (after
U+00FF), enclose the code into braces.
11TRegExpr Documentation, Version 1.147
RegEx Allumettes
\xAB character with 2-digit hex code AB
\x{AB20} character with 1..4-digit hex code AB20
‘‘ foo x20bar‘‘ foo bar (notez l’espace au milieu)
There are a number of predefined escape-codes for non-printable characters, like in C language :
RegEx Allumettes
‘‘ t‘‘ onglet (HT / TAB), identique à \x09
\n line feed (LF), same as \x0a
‘‘ r‘‘ carriage return (CR), same as \x0d
‘‘ f‘‘ Form Feed (FF), identique à ‘‘ x0c‘‘
‘‘ a‘‘ alarme (BEL), identique à ‘‘ x07‘‘
‘‘ e‘‘ échappement (ESC), identique à ‘‘ x1b‘‘
\cA . . . \cZ
chr(0) to chr(25).
For example, \cI matches the tab-char.
Lower-case letters « a ». . . »z » are also supported.
S’échapper
To represent special regex character (one of .+*?|\()[]{}^$), prefix it with a backslash \. The literal backslash
must be escaped too.
RegEx Allumettes
\^FooBarPtr ^FooBarPtr, this is ^ and not start of line
‘‘ [a ] ‘‘ [a], this is not character class
5.1.3 Classes de personnages
Classes de caractères utilisateur
Character class is a list of characters inside square brackets []. The class matches any single character listed in this
class.
RegEx Allumettes
‘‘ foob [aeiou] r‘‘ foobar, foober etc mais pas foobbr, foobcr etc
You can « invert » the class - if the first character after the [ is ^, then the class matches any character except the
characters listed in the class.
RegEx Allumettes
‘‘ foob [^ aeiou] r‘‘ foobbr, foobcr etc mais pas foobar, foober etc
Within a list, the dash - character is used to specify a range, so that a-z represents all characters between a and z,
inclusive.
12 Chapitre 5. DocumentationTRegExpr Documentation, Version 1.147
If you want the dash - itself to be a member of a class, put it at the start or end of the list, or escape it with a backslash.
If you want ] as part of the class you may place it at the start of list or escape it with a backslash.
RegEx Allumettes
[-az] a, z et -
[az-] a, z et -
‘‘ [a -z] ‘‘ a, z et -
‘‘ [az] ‘‘ caractères de a à z
‘‘ [n- x0D] ‘‘ characters from chr(10) to chr(13)
Meta-Classes
There are a number of predefined character classes that keeps regular expressions more compact, « meta-classes » :
RegEx Allumettes
\w an alphanumeric character, including _
\W a non-alphanumeric
‘‘ d‘‘ a numeric character (same as [0-9])
‘‘ D‘‘ un non numérique
\s N’importe quel espace (identique à [\t\n\r\f])
‘‘ S‘‘ a non-space
\h
horizontal whitespace : the tab and all characters
in the « space separator » Unicode category
\H not a horizontal whitespace
\v
vertical whitespace : all characters treated as
line-breaks in the Unicode standard
\V not a vertical whitespace
You may use all meta-classes, mentioned in the table above, within user character classes.
RegEx Allumettes
‘‘ foob dr‘‘ foob1r, foob6r and so on, but not foobar, foobbr and so on
‘‘ foob [w s] r‘‘ foobar, foob r, foobbr and so on, but not foob1r, foob=r and so on
Note : TRegExpr
Propriétés SpaceChars et‘ WordChars ‘_ définit les classes de caractères‘ w‘,‘ W‘,‘‘s‘‘, \S.
So you can redefine these classes.
5.1.4 Limites
5.1. Expressions régulières (RegEx) 13TRegExpr Documentation, Version 1.147
Limites de lignes
Meta-char Allumettes
. any character, can include line-breaks
^ zero-length match at start of line
$ zero-length match at end of line
‘‘ A‘‘ zero-length match at the very beginning
\z zero-length match at the very end
‘‘ Z‘‘ like \z but also matches before the final line-break
Examples :
RegEx Allumettes
‘‘ ^ foobar‘‘ foobar seulement si c’est en début de ligne
‘‘ foobar $ ‘‘ foobar seulement si c’est en fin de ligne
‘‘ ^ foobar $ ‘‘ foobar seulement s’il s’agit de la seule chaîne en ligne
‘‘ foob.r‘‘ foobar, foobbr, foob1r et ainsi de suite
Meta-char ^ matches zero-length position at the beginning of the input string. $ - at the ending. If modifier /m is on,
they also match at the beginning/ending of individual lines in the multi-line text.
Notez qu’il n’y a pas de ligne vide dans la séquence ‘‘ x0D x0A‘‘.
Note : TRegExpr
Si vous utilisez la version Unicode ‘__, alors‘ ^ /‘‘$‘ correspond également à‘ x2028‘,‘
x2029‘,‘ x0B‘,‘ x0C‘ ou \x85.
Meta-char \A matches zero-length position at the very beginning of the input string, \z - at the very ending. They
ignore modifier /m. \Z is like \z but also matches before the final line-break (LF and CR LF). Behaviour of \A, \z,
\Z is made like in most of major regex engines (Perl, PCRE, etc).
Meta-char . (dot) by default matches any character, but if you turn off the modifier /s, then it won’t match line-breaks
inside the string.
Note that ^.*$ does not match a string between \x0D\x0A, because this is unbreakable line separator. But it matches
the empty string within the sequence \x0A\x0D because this is 2 line-breaks in the wrong order.
Note : TRegExpr
Multi-line processing can be tuned by properties LineSeparators and UseLinePairedBreak.
Vous pouvez donc utiliser les séparateurs de style Unix \n ou le style DOS / Windows \r\n ou les mélanger (comme
décrit dans le comportement par défaut ci-dessus).
Si vous préférez une description mathématiquement correcte, vous pouvez la trouver sur www.unicode.org.
Limites des mots
RegEx Allumettes
\b une limite de mot
\B une limite de non-mot
14 Chapitre 5. DocumentationTRegExpr Documentation, Version 1.147
Une limite de mots \b est un espace entre deux caractères qui ont un ‘‘ w w‘‘ d’un côté et un \W de l’autre côté (dans
l’un ou l’autre ordre).
5.1.5 Quantification
Quantifiers
Tout élément d’une expression régulière peut être suivi d’un quantificateur. Le quantificateur spécifie le nombre de
répétitions de l’article.
RegEx Allumettes
‘‘ {n} ‘‘ exactement n fois
‘‘ {n,} ‘‘ au moins n fois
‘‘ {n, m} ‘‘ au moins n mais pas plus de m fois
* zéro ou plus, semblable à {0,}
+ un ou plusieurs, similaire à {1,}
? zéro ou un, similaire à {0,1}
Ainsi, les chiffres entre accolades ‘‘ {n, m} , spécifient le nombre minimum de fois où
correspondre ``n et le maximum m.
The {n} is equivalent to {n,n} and matches exactly n times. The {n,} matches n or more times.
There is no practical limit to the values n and m (limit is maximal signed 32-bit value).
RegEx Allumettes
‘‘ foob. * r‘‘ foobar, foobalkjdflkj9r et foobr
‘‘ foob. + r‘‘ foobar, foobalkjdflkj9r mais pas foobr
‘‘ foob. ? r‘‘ foobar, foobbr et foobr mais pas foobalkj9r
‘‘ fooba {2} r‘‘ foobaar
‘‘ fooba {2,} r‘‘ foobaar, foobaaar, foobaaaar etc.
‘‘ fooba {2,3} r‘‘ foobaar, ou foobaaar mais pas foobaaaar
‘‘ (foobar) {8,10} ‘‘ 8. . . 10 instances of foobar (() is group)
Cupidité
Quantifiers in « greedy » mode takes as many as possible, in « lazy » mode - as few as possible.
By default all quantifiers are « greedy ». Append the character ? to make any quantifier « lazy ».
Pour la chaîne abbbbc :
RegEx Allumettes
‘‘ b + ‘‘ bbbb
b+? b
b*? chaîne vide
‘‘ b {2,3} ? ‘‘ ‘‘ bb‘‘
‘‘ b {2,3} ‘‘ ‘‘ bbb‘‘
You can switch all quantifiers into « lazy » mode (modifier /g, below we use in-line modifier change).
5.1. Expressions régulières (RegEx) 15TRegExpr Documentation, Version 1.147
RegEx Allumettes
‘‘ ( ? -g) b + ‘‘ b
Possessive Quantifier
The syntax is : a++, a*+, a?+, a{2,4}+. Currently it’s supported only for simple braces, but not for braces after
group like (foo|bar){3,5}+.
This regex feature is described here. In short, possessive quantifier speeds up matching in complex cases.
5.1.6 Choice
Expressions in the choice are separated by vertical bar |.
Donc ‘‘ fee | fie | foe‘‘ correspondra à l’un des fee, fie ou foe dans la chaîne cible (comme le ferait ‘‘ f (e | i | o) e
‘‘).
La première expression inclut tout du dernier délimiteur de motif (‘‘ (, `` `` ``, ou le début du
motif) jusqu'au premier ``|, et la dernière expression contient tout du dernier | vers le prochain
délimiteur de motif.
Cela semble un peu compliqué, il est donc courant d’inclure le choix entre parenthèses afin d’éviter toute confusion
quant au début et à la fin.
Les expressions dans le choix sont essayées de gauche à droite, ainsi la première expression qui correspond est celle
qui est choisie.
Par exemple, l’expression régulière ’foo | foot‘ dans la chaîne‘ barefoot‘ correspond à‘’ foo‘‘. Juste une première
expression qui correspond.
Rappelez-vous également que | est interprété comme un littéral entre crochets, donc si vous écrivez [[fee | fie | foe]
vous ne faites en fait que correspondre à [feio |] ‘.
RegEx Allumettes
‘‘ foo (bar | foo) ‘‘ foobar ou foofoo
5.1.7 Groups
The brackets () are used to define groups (ie subexpressions).
Note : TRegExpr
Group positions, lengths and actual values will be in MatchPos, MatchLen and Match.
Vous pouvez les remplacer par Substitute.
Groups are numbered from left to right by their opening parenthesis (including nested groups). First group has index
1. The entire regex has index 0.
For string foobar, the regex (foo(bar)) will find :
Group Value
0 foobar
1 foobar
2 bar
16 Chapitre 5. DocumentationTRegExpr Documentation, Version 1.147
5.1.8 Références arrières
Meta-chars \1 through \9 are interpreted as backreferences to groups. They match the previously found group with
the specified index.
RegEx Allumettes
(.)\1+ aaaa et cc
(.+)\1+ aussi abab et 123123
RegEx (['"]?)(\d+)\1 matches "13" (in double quotes), or '4' (in single quotes) or 77 (without quotes) etc.
5.1.9 Named Groups and Backreferences
To make some group named, use this syntax : (?Pexpr). Also Perl syntax is supported : (?'name'expr).
Name of group must be valid identifier : first char is letter or « _ », other chars are alphanumeric or « _ ». All named
groups are also usual groups and share the same numbers 1 to 9.
Backreferences to named groups are (?P=name), the numbers \1 to \9 can also be used.
RegEx Allumettes
(?P['"])\w+(?P=qq) "word" and 'word'
5.1.10 Modificateurs
Les modificateurs permettent de modifier le comportement des expressions régulières.
You can set modifiers globally in your system or change inside the regular expression using the ( ?imsxr-imsxr).
Note : TRegExpr
Pour changer les modificateurs, utilisez ModifierStr ou les propriétés TRegExpr` appropriées‘ Modifier * ‘__.
Les valeurs par défaut sont définies dans variables globales. Par exemple, la variable globale RegExprModifierX
définit la valeur par défaut de la propriété ModifierX.
je, insensible à la casse
Insensible à la casse. Utilisez installé dans les paramètres régionaux de votre système, voir aussi InvertCase.
m, chaînes multi-lignes
Traiter la chaîne comme plusieurs lignes. Donc ‘‘ ‘‘ et‘‘$‘ correspondent au début ou à la fin de n’importe quelle ligne
n’importe où dans la chaîne.
Voir aussi Limites de ligne.
5.1. Expressions régulières (RegEx) 17TRegExpr Documentation, Version 1.147
s, chaînes simples
Traiter la chaîne comme une seule ligne. Donc . correspond à n’importe quel caractère, même à un séparateur de
ligne.
Voir aussi Limites de ligne, auquel elle ne correspond normalement pas.
g, la gourmandise
Note : TRegExpr seul modificateur.
En le sélectionnant Off, vous basculerez les quantificateurs ‘__ en mode‘ non glouton ‘__.
Donc, si le modificateur «/ g» est «désactivé», alors «+» fonctionne comme «+ ?», «*» Comme «* ?» Et ainsi de suite.
Par défaut, ce modificateur est On.
x, syntaxe eXtended
Permet de commenter une expression régulière et de la diviser en plusieurs lignes.
Si le modificateur est ‘‘ On‘‘, nous ignorons tous les espaces qui ne sont ni antislash ni dans une classe de caractères.
Et le caractère # sépare les commentaires.
Notez que vous pouvez utiliser des lignes vides pour mettre en forme une expression régulière pour une meilleure
lisibilité :
((abc) # comment 1 # (efg) # comment 2)
Cela signifie également que si vous voulez de vrais espaces ou des caractères # dans le motif (en dehors d’une classe
de caractères, où ils ne sont pas affectés par / x‘), vous devrez soit les échapper soit les encoder en utilisant échappées
octales ou hexagonales.
r, gammes russes
Note : TRegExpr seul modificateur.
En russe, les caractères de la table ASCII ‘‘ ‘‘ / sont placés séparément des autres.
Grands et petits caractères russes sont dans des plages séparées, c’est la même chose que pour les caractères anglais
mais néanmoins je voulais une forme abrégée.
Avec ce modificateur à la place de [--] vous pouvez écrire [-] ‘‘ si vous avez besoin de tous les caractères russes.
Lorsque le modificateur est ‘‘ On‘‘ :
RegEx Allumettes
‘‘ -‘‘ caractères de à et ‘‘ ‘‘
‘‘ -‘‘ caractères de à et ‘‘ ‘‘
‘‘ -‘‘ tous les symboles russes
Le modificateur est défini par défaut sur On.
18 Chapitre 5. DocumentationTRegExpr Documentation, Version 1.147 5.1.11 Assertions Positive lookahead assertion : foo(?=bar) matches « foo » only before « bar », and « bar » is excluded from the match. Negative lookahead assertion : foo(?!bar) matches « foo » only if it’s not followed by « bar ». Positive lookbehind assertion : (?
TRegExpr Documentation, Version 1.147
RegEx Allumettes
‘‘ ( ? i) Saint-Petersburg‘‘ «Saint-Pétersbourg» et «Saint-Pétersbourg»
‘‘ ( ? i) Saint - ( ? - i) Petersburg‘‘ ‘‘ Saint-Petersburg‘‘ mais pas ‘‘ Saint-petersburg‘‘
‘‘ ( ? i) (Saint -) ? Petersburg‘‘ ‘‘ Saint-petersburg‘‘ et saint-petersburg
‘‘ (( ? i) Saint -) ? Petersburg‘‘ saint-Petersburg, mais pas saint-petersburg
5.1.15 Comments
Syntax is like this : (?#text). Text inside brackets is ignored.
Notez que le commentaire est fermé par le ) le plus proche, il n’ya donc aucun moyen de mettre un littéral ) dans le
commentaire.
5.1.16 Recursion
Syntax is (?R), the alias is (?0).
The regex a(?R)?z matches one or more letters « a » followed by exactly the same number of letters « z ».
The main purpose of recursion is to match balanced constructs or nested constructs. The generic regex is b(?:m|(?
R))*e where « b » is what begins the construct, « m » is what can occur in the middle of the construct, and « e » is
what occurs at the end of the construct.
If what may appear in the middle of the balanced construct may also appear on its own without the beginning and
ending parts then the generic regex is b(?R)*e|m.
5.1.17 Subroutine calls
Syntax for call to numbered groups : (?1) . . . (?90) (maximal index is limited by code).
Syntax for call to named groups : (?P>name). Also Perl syntax is supported : (?&name).
This is like recursion but calls only code of capturing group with specified index.
5.1.18 Unicode Categories
Unicode standard has names for character categories. These are 2-letter strings. For example « Lu » is uppercase
letters, « Ll » is lowercase letters. And 1-letter bigger category « L » is all letters.
— Cc - Control
— Cf - Format
— Co - Private Use
— Cs - Surrrogate
— Ll - Lowercase Letter
— Lm - Modifier Letter
— Lo - Other Letter
— Lt - Titlecase Letter
— Lu - Uppercase Letter
— Mc - Spacing Mark
— Me - Enclosing Mark
— Mn - Nonspacing Mark
— Nd - Decimal Number
— Nl - Letter Number
20 Chapitre 5. DocumentationTRegExpr Documentation, Version 1.147
— No - Other Number
— Pc - Connector Punctuation
— Pd - Dash Punctuation
— Pe - Close Punctuation
— Pf - Final Punctuation
— Pi - Initial Punctuation
— Po - Other Punctuation
— Ps - Open Punctuation
— Sc - Currency Symbol
— Sk - Modifier Symbol
— Sm - Math Symbol
— So - Other Symbol
— Zl - Line Separator
— Zp - Paragraph Separator
— Zs - Space Separator
Meta-character \p denotes one Unicode char of specified category. Syntaxes : \pL and \p{L} for 1-letter name,
\p{Lu} for 2-letter names.
Meta-character \P is inverted, it denotes one Unicode char not in the specified category.
These meta-characters are supported withing character classes too.
5.1.19 Épilogue
Dans cet ancien billet de blog du siècle précédent J’illustre quelques utilisations d’expressions régulières.
Anglais Deutsch Français Español
5.2 TRegExpr
Implements regular expressions in pure Pascal. Compatible with Free Pascal, Delphi 2-7, C++Builder 3-6.
To use it, copy files « regexpr.pas », « regexpr_unicodedata.pas », « regexpr_compilers.inc », to your project folder.
The library is already included into Lazarus (Free Pascal) project so you do not need to copy anything if you use
Lazarus.
5.2.1 Classe TRegExpr
VersionMajor, VersionMinor
Return major and minor version of the component.
VersionMajor = 1
VersionMinor = 101
Expression
Expression régulière.
For optimization, regular expression is automatically compiled into P-code. Human-readable form of the P-code is
returned by Dump.
5.2. TRegExpr 21TRegExpr Documentation, Version 1.147 In case of any errors in compilation, Error method is called (by default Error raises exception ERegExpr). ModifierStr Définir ou obtenir les valeurs de modificateurs d’expression régulière. Format of the string is similar to (?ismx-ismx). For example ModifierStr := ‘i-x’ will switch on the modifier /i, switch off /x and leave unchanged others. Si vous essayez de définir un modificateur non supporté, Error sera appelé. Modificateur Modifier /i, « case-insensitive », initialized with RegExprModifierI value. Modificateur Modificateur / r," extension de la plage russe ", initialisé avec la valeur RegExprModifierR. Modificateurs Modificateur / s," chaînes simples ", initialisé avec la valeur RegExprModifierS. Modificateur Modificateur / g," gourmandise ", initialisé avec la valeur RegExprModifierG. Modificateur Modificateur / m," chaînes multilignes ", initialisé avec la valeur RegExprModifierM. ModificateurX Modificateur / x," syntaxe eXtended ", initialisé avec la valeur RegExprModifierX. Exec Finds regular expression against AInputString, starting from the beginning. The overloaded Exec version without AInputString exists, it uses AInputString from previous call. Voir aussi la fonction globale ExecRegExpr que vous pouvez utiliser sans la création explicite d’objet TRegExpr. ExecNext Finds next match. If parameter ABackward is True, it goes downto position 1, ie runs backward search. Without parameter it works the same as : 22 Chapitre 5. Documentation
TRegExpr Documentation, Version 1.147
si MatchLen [0] = 0 alors ExecPos (MatchPos [0] + 1) sinon ExecPos (MatchPos [0] +
˓→MatchLen [0]);
Lève une exception si elle est utilisée sans précéder l’appel réussi à Exec, ExecPos ou ExecNext.
So you always must use something like :
if Exec(InputString)
then
repeat
{ proceed results}
until not ExecNext;
ExecPos
Finds match for AInputString starting from AOffset position (1-based).
Parameter ABackward means going from AOffset downto 1, ie backward search.
Parameter ATryOnce means that testing for regex will be only at the initial position, without going to next/previous
positions.
InputString
Renvoie la chaîne d’entrée en cours (à partir du dernier appel Exec ou de la dernière affectation à cette propriété).
Toute affectation à cette propriété efface Match, MatchPos et MatchLen.
Remplacer
fonction Substitute (const ATemplate: RegExprString): RegExprString;
Returns ATemplate, where $& or $0 are replaced with the found match, and $1 to $9 are replaced with found
groups 1 to 9.
To use in template the characters $ or \, escape them with a backslash \, like \\ or \$.
Symbol Description
$& match entier expression régulière
$0 match entier expression régulière
$1 .. $9 contents of numbered group 1 .. 9
\n dans Windows remplacé par \r\n
\l lowercase one next char
\L minuscule tous les caractères après cela
\u uppercase one next char
\U majuscule tous les caractères après cela
'1 \ $ est $ 2 \\ rub \\' -> '1 $ est \ rub \ '' \
˓→U $ 1 \\ r 'se transforme en' \ r '
Si vous voulez placer un chiffre brut après ’$ n’, vous devez délimiter n avec des accolades ‘‘ {} ‘‘.
5.2. TRegExpr 23TRegExpr Documentation, Version 1.147
'a $ 12bc' -> 'a bc '' a $ {1} 2bc '->'
˓→a 2bc '.
To use found named groups, use syntax ${name}, where « name » is valid identifier of previously found named group
(starting with non-digit).
Divisé
Splits AInputStr into APieces by regex occurrences.
Appelle en interne Exec / ExecNext
Voir aussi la fonction globale SplitRegExpr que vous pouvez utiliser sans la création explicite d’objet TRegExpr.
Remplacer, RemplacerEx
fonction Remplacer (Const AInputStr: RegExprString; const AReplaceStr: RegExprString;
˓→AUseSubstitution: boolean = False): RegExprString; surcharge; function Remplacer
˓→(Const AInputStr: RegExprString; AReplaceFunc: TRegExprReplaceFunction):
˓→RegExprString; surcharge; function ReplaceEx (Const AInputStr: RegExprString;
˓→AReplaceFunc: TRegExprReplaceFunction): RegExprString;
Returns the string with regex occurencies replaced by the replace string.
Si le dernier argument (AUseSubstitution) est vrai, alors AReplaceStr sera utilisé comme modèle pour les
méthodes de substitution.
Expression: = '((? I) bloc | var) \ s * (\ s * \ ([^] * \) \ s *) \ s *';
˓→Remplacez ('BLOCK (test1)', 'def "$ 1" valeur "$ 2"&
˓→#39;, True);
Retourne def "BLOCK" valeur "test1"
Remplacez ('BLOCK (test1)', 'def "$ 1", valeur "$ 2"&
˓→#39;, False)
Retourne ‘‘ def " ;$ 1" ; valeur " ;$ 2" ; ‘‘
Appelle en interne Exec / ExecNext
Overloaded version and ReplaceEx operate with callback function, so you can implement really complex functio-
nality.
Voir aussi la fonction globale ReplaceRegExpr que vous pouvez utiliser sans la création explicite d’objet TRegExpr.
SubExprMatchCount
Count of groups (subexpressions) found in last Exec / ExecNext call.
If there are no groups found, but some string was found (Exec* returned True), it returns 0. If no groups nor some
string were found (Exec / ExecNext returned false), it returns -1.
Note, that some group may be not found, and for such group MathPos=MatchLen=-1 and Match=”.
Expression: = '(1)? 2 (3)?'; Exec ('123'): SubExprMatchCount = 2,
˓→Match [0] = '123', [1] = '1', [2] = '3' Exec ('12'
˓→): SubExprMatchCount = 1, Match [0] = '12 ', [1] =' 1 'Exec ('
(suite sur la page suivante)
˓→23 '): SubExprMatchCount = 2, Match [0] =' 23 ', [1] =' ', [2]
˓→=' 3 'Exec (' 2 '): SubExprMatchCount = 0, Match [0] =' 2 '
˓→Exec (' 7 ') - renvoie False: SubExprMatchCount = -1
24 Chapitre 5. DocumentationTRegExpr Documentation, Version 1.147
(suite de la page précédente)
MatchPos
Position (1-based) of group with specified index. Result is valid only after some match was found. First group has
index 1, the entire match has index 0.
Returns -1 if no group with specified index was found.
MatchLen
Length of group with specified index. Result is valid only after some match was found. First group has index 1, the
entire match has index 0.
Returns -1 if no group with specified index was found.
Rencontre
String of group with specified index. First group has index 1, the entire match has index 0. Returns empty string, if no
such group was found.
MatchIndexFromName
Returns group index (1-based) from group name, which is needed for « named groups ». Returns -1 if no such named
group was found.
LastError
Returns Id of last error, or 0 if no errors occured (unusable if Error method raises exception). It also clears internal
status to 0 (no errors).
ErrorMsg
Renvoie le message Error en cas d’erreur avec ‘‘ ID = AErrorID‘‘.
CompilerErrorPos
Returns position in regex, where P-code compilation was stopped.
Useful for error diagnostics.
SpaceChars
Contains chars, treated as \s (initially filled with RegExprSpaceChars global constant).
WordChars
Contains chars, treated as \w (initially filled with RegExprWordChars global constant).
5.2. TRegExpr 25TRegExpr Documentation, Version 1.147 LineSeparators Line separators (like \n in Unix), initially filled with RegExprLineSeparators global constant). See also Line Boundaries UseLinePairedBreak Boolean property, enables to detect paired line separator CR LF. See also Line Boundaries For example, if you need only Unix-style separator LF, assign LineSeparators := #$a and UseLinePairedBreak := False. If you want to accept as line separators only CR LF but not CR or LF alone, then assign LineSeparators := '' (empty string) and UseLinePairedBreak := True. By default, « mixed » mode is used (defined in RegExprLineSeparators global constant) : LineSeparators := #$d#$a; UseLinePairedBreak := True; Behaviour of this mode is described in the Line Boundaries. Compiler Compiles regular expression to internal P-code. Utile par exemple pour les éditeurs d’expressions régulières GUI - pour vérifier les expressions régulières sans les utiliser. Déverser Shows P-code (compiled regular expression) as human-readable string. 5.2.2 Constantes globales EscChar Escape character, by default backslash '\'. SubstituteGroupChar Char used to prefix groups (numbered and named) in Substitute method, by default '$'. RegExprModifierI Modifier i default value. 26 Chapitre 5. Documentation
TRegExpr Documentation, Version 1.147 RegExprModifierR Modifier r default value. RegExprModifierS Modifier s default value. RegExprModifierG Modifier g default value. RegExprModifierM Modifier m default value. RegExprModifierX Modifier x default value. RegExprSpaceChars Default for SpaceChars property. RegExprWordChars Default value for WordChars property. RegExprLineSeparators Default value for LineSeparators property. 5.2.3 Fonctions globales Toutes ces fonctionnalités sont disponibles en tant que méthodes de TRegExpr, mais avec les fonctions globales, il n’est pas nécessaire de créer une instance TReExpr pour que votre code soit plus simple si vous n’avez besoin que d’une seule fonction. ExecRegExpr Returns True if the string matches the regular expression. Just like Exec in TRegExpr. SplitRegExpr Splits the string by regular expression occurences. See also Split if you prefer to create TRegExpr instance explicitly. 5.2. TRegExpr 27
TRegExpr Documentation, Version 1.147
ReplaceRegExpr
function ReplaceRegExpr (const ARegExpr, AInputStr, AReplaceStr: RegExprString;
˓→AUseSubstitution: boolean = False): RegExprString; surcharge; Type
˓→TRegexReplaceOption = (rroModifierI, rroModifierR, rroModifierS, rroModifierG,
˓→rroModifierM, rroModifierX, rroUseSubstitution, rroUseOsLineEnd);
˓→TRegexReplaceOptions = Ensemble de TRegexReplaceOption; fonction ReplaceRegExpr
˓→(const ARegExpr, AInputStr, AReplaceStr: RegExprString; Options:
˓→TRegexReplaceOptions): RegExprString; surcharge;
Retourne la chaîne avec les expressions régulières remplacées par le AReplaceStr. Voir aussi Replace si vous
préférez créer explicitement l’instance de TRegExpr.
If last argument (AUseSubstitution) is True, then AReplaceStr will be used as template for Substitution
methods :
ReplaceRegExpr ('((? I) bloc | var) \ s * (\ s * \ ([^] * \) \ s *) \ s *', &
˓→#39;BLOCK (test1)', 'def "$ 1" valeur " 2 $ '', True)
Returns def 'BLOCK' value 'test1'
Mais celui-ci (notez qu’il n’y a pas de dernier argument) :
ReplaceRegExpr ('((? I) bloc | var) \ s * (\ s * \ ([^] * \) \ s *) \ s *', &
˓→#39;BLOCK (test1)', 'def "$ 1" valeur " 2 $ ''
Retourne ‘‘ def " ;$ 1" ; valeur " ;$ 2" ; ‘‘
Version avec options
Avec Options vous contrôlez le comportement du \n (si rroUseOsLineEnd alors \n est remplacé par \n\r
sous Windows et \n dans Linux). Etc.
Type TRegexReplaceOption = (rroModifierI, rroModifierR, rroModifierS, rroModifierG,
˓→rroModifierM, rroModifierX, rroUseSubstitution, rroUseOsLineEnd);
QuoteRegExprMetaChars
Replace all metachars with its safe representation, for example abc'cd.( is converted to abc\'cd\.\(
This function is useful for regex auto-generation from user input.
RegExprSubExpressions
Makes list of subexpressions found in ARegExpr.
In ASubExps every item represents subexpression, from first to last, in format :
String - texte de sous-expression (sans ’()’)
Low word of Object - starting position in ARegExpr, including ‘(’ if exists ! (first position is 1)
High word of Object - length, including starting ‘(’ and ending ‘)’ if exist !
AExtendedSyntax - must be True if modifier /x os on, while using the regex.
Usefull for GUI editors of regex (you can find example of usage in REStudioMain.pas)
28 Chapitre 5. DocumentationTRegExpr Documentation, Version 1.147
Code de résultat Sens
0 Success. No unbalanced brackets were found.
-1 Not enough closing brackets ).
-(n+1) At position n it was found opening [ without corresponding closing ].
n At position n it was found closing bracket ) without corresponding opening (.
If Result 0, then ASubExprs can contain empty items or illegal ones.
5.2.4 ERegExpr
ERegExpr = class (Exception) public ErrorCode: integer; // code d'erreur. Les
˓→codes d'erreur de compilation sont avant 1000 CompilerErrorPos: integer; //
˓→Position dans le lieu où l'erreur de compilation s'est produite end;
5.2.5 Unicode
In Unicode mode, all strings (InputString, Expression, internal strings) are of type UnicodeString/WideString, instead
of simple « string ». Unicode slows down performance, so use it only if you really need Unicode support.
To use Unicode, uncomment {$DEFINE UniCode} in regexpr.pas (remove off).
English Deutsch Français Español
5.3 FAQ
5.3.1 J’ai trouvé un bug terrible : TRegExpr déclenche une exception de violation
d’accès !
Réponse
Vous devez créer l’objet avant utilisation. Donc, après avoir déclaré quelque chose comme :
r: TRegExpr
n’oubliez pas de créer l’instance d’objet :
r: = TRegExpr.Create.
5.3.2 Les expressions régulières avec ( ? = . . . ) ne fonctionnent pas
Regarder devant n’est pas implémenté dans le TRegExpr. Mais dans de nombreux cas, vous pouvez facilement le
remplacer par de simples sous-expressions..
5.3.3 Est-ce qu’il prend en charge Unicode ?
Réponse
Comment utiliser Unicode
5.3. FAQ 29TRegExpr Documentation, Version 1.147 5.3.4 Pourquoi TRegExpr renvoie-t-il plus d’une ligne ? Par exemple, re ‘‘ ‘‘ renvoie le premier
TRegExpr Documentation, Version 1.147
5.3.8 Je vérifie les entrées de l’utilisateur. Pourquoi TRegExpr renvoie-t-il True
pour les chaînes d’entrée incorrectes ?
Réponse
Dans de nombreux cas, les utilisateurs de TRegExpr oublient que l’expression régulière est utilisée pour ** rechercher
** dans la chaîne de saisie.
Ainsi, par exemple, si vous utilisez une expression ‘‘ d {4,4} , vous obtiendrez un succès pour les
entrées utilisateur incorrectes telles que ``12345 ou toutes les lettres 1234.
Vous devez vérifier du début à la fin de la ligne pour vous assurer qu’il n’y a plus rien d’autre : ‘‘ ^ d {4,4} $ ‘‘.
5.3.9 Pourquoi les itérateurs non-gourmands fonctionnent-ils parfois comme en
mode gourmand ?
Par exemple, le r.e. a+?,b+? Appliqué à la chaîne aaa,bbb correspond à aaa,b, mais ne devrait-il pas corres-
pondre à a,b à cause de la non-cupidité du premier itérateur ?
Réponse
C’est à cause de la manière de TRegExpr de travailler. En fait, beaucoup d’autres moteurs fonctionnent exactement
de la même manière : ils ne font que l’optimisation de la recherche simple, et n’essayent pas de faire la meilleure
optimisation.
Dans certains cas, c’est mauvais, mais en commun, c’est plutôt un avantage que une limitation, pour des raisons de
performance et de prévisibilité.
La règle principale - essayez d’abord de faire la correspondance à partir de l’emplacement actuel et seulement si cela
est absolument impossible, avancez d’un caractère et essayez à nouveau de la position suivante dans le texte.
Donc, si vous utilisez «a, b + ?», Cela correspond à «a, b». Dans le cas de a+?,b+?, Ce n’est plus recommandé (nous
ajoutons un modificateur non-glouton) mais il est toujours possible de faire correspondre plus d’un a, donc TRegExpr
le fera.
TRegExpr comme Perl ou Unix ne tente pas d’avancer et de vérifier - ce serait une " ;meilleure" ; corres-
pondance. En premier lieu, juste parce qu’il n’ya aucun moyen de dire que c’est plus ou moins bon.
5.3.10 Comment utiliser TRegExpr avec Borland C ++ Builder ?
J’ai un problème car aucun fichier d’en-tête (.h ou .hpp) n’est disponible.
Réponse
— Ajoutez RegExpr.pas au projet bcb.
— Compiler le projet. Cela génère le fichier d’en-tête RegExpr.hpp.
— Vous pouvez maintenant écrire du code utilisant l’unité RegExpr.
— N’oubliez pas d’ajouter «#include« RegExpr.hpp »‘ ‘si nécessaire.
— N’oubliez pas de remplacer tous les \ dans les expressions régulières par \\ ou redéfinis EscChar const.
5.3.11 Pourquoi beaucoup de solutions (y compris de l’aide et de la démonstration
TRegExpr) fonctionnent-elles mal dans Borland C ++ Builder ?
Réponse
Le conseil se trouve dans la question précédente ;) Le symbole ‘‘ ‘‘ a une signification particulière dans C++, il
faut donc y échapper (comme décrit dans la réponse précédente). Mais si vous n’aimez pas les choses comme
5.3. FAQ 31TRegExpr Documentation, Version 1.147
\\w + \\\\ w + \\. \\ w + ``, vous pouvez redéfinir la constante ``EscChar (dans
RegExpr.pas). Par exemple EscChar = "/". Ensuite, vous pouvez écrire /w+/w+/./w+,
semble inhabituel mais plus lisible.
Anglais Allemand Français Espagnol
5.4 Démos
Code de démonstration pour TRegExpr
5.4.1 introduction
Si vous n’êtes pas familier avec l’expression régulière, jetez un œil à la commande resyntax.
Interface TRegExpr décrite dans la section Interface TRegExpr.
5.4.2 Text2HTML
Sources Text2HTML
Publier du texte brut au format HTML
Utilise l’unité HyperLinksDecorator qui est basé sur TRegExpr.
Cette unité contient des fonctions pour décorer des hyperliens.
Par exemple, remplace «www.masterAndrey.com» par « www.masterAndrey.com » ou «filbert @ yandex.ru» par « fil-
bert@yandex.ru ».
function DecorateURLs (const AText: string; AFlags: TDecorateURLsFlagSet = [durlAddr,
˓→durlPath]): string; type TDecorateURLsFlags = (durlProto, durlAddr, durlPort,
˓→durlPath, durlBMark, durlParam); TDecorateURLsFlagSet = ensemble de
˓→TDecorateURLsFlags; fonction DecorateEMails (const AText: chaîne): chaîne;
Valeur Sens
durlProto Protocole (comme ‘‘ ftp : // ‘‘ ou ‘‘ http : // ‘‘)
durlAddr Adresse TCP ou nom de domaine (comme masterAndrey.com)
durlPort Numéro de port si spécifié (comme : 8080)
durlPath Chemin du document (comme index.html)
durlBMark Marque-page (comme ‘‘ # mark‘‘)
durlParam Paramètres d’URL (comme ? ID = 2 & User = 13)
Retourne le texte saisi AText avec des hyperliens décorés.
AFlags décrit quelles parties de l’hyperlien doivent être incluses dans la partie visible du lien.
Par exemple, si AFlags est‘ [durlAddr], alors l’hyperlien www.masterAndrey.com/contacts.htm sera décoré
comme ‘‘ www.masterAndrey.com ‘‘.
32 Chapitre 5. DocumentationTRegExpr Documentation, Version 1.147 5.4.3 TRegExprRoutines Exemples très simples, voir les commentaires à l’intérieur de l’unité 5.4.4 TRegExprClass Exemples légèrement plus complexes, voir les commentaires à l’intérieur de l’unité 5.4. Démos 33
TRegExpr Documentation, Version 1.147 34 Chapitre 5. Documentation
CHAPITRE 6
Traductions
La documentation est disponible en anglais et en russe ‘_.
Il existe également d’anciennes traductions en allemand, bulgare, français et espagnol. Si vous voulez aider à mettre à
jour ces anciennes traductions, veuillez me contacter. ‘_.
New translations are based on GetText and can be edited with Weblate.
Ils sont déjà traduits automatiquement et ne nécessitent que la correction d’épreuves. Il peut s’agir d’un copier-coller
d’anciennes traductions.
35TRegExpr Documentation, Version 1.147 36 Chapitre 6. Traductions
CHAPITRE 7
Reconnaissance
Beaucoup de fonctionnalités suggérées et beaucoup de bugs fondés (et même corrigés) par les contributeurs de TRe-
gExpr.
Je ne peux pas tous les énumérer ici, mais j’apprécie tous les rapports de bugs, suggestions de fonctionnalités et
questions que je reçois de votre part.
— Alexey Torgashin - added many features in 2019-2020, e.g. named groups, non-capturing groups, assertions,
backward search
— Guido Muehlwitz - bogue trouvé et corrigé dans le traitement d’une grosse chaîne
— Stephan Klimek - testing in C++Builder and suggesting/implementing many features
— Steve Mudford - Paramètre de décalage implémenté
— Martin Baur (www.mindpower.com) - traduction allemande, suggestions utiles
— Yury Finkel - implemented Unicode support, found and fixed some bugs
— Ralf Junker - implemented some features, many optimization suggestions
— Simeon Lilov - traduction en bulgare
— Filip Jirsk and Matthew Winter - help in implementation non-greedy mode
— Kit Eason - many examples for introduction help section
— Juergen Schroth - chasse aux insectes et suggestions utiles
— Martin Ledoux - traduction française
— Diego Calp, Argentine - traduction espagnole
37Vous pouvez aussi lire