Interface de TRegExpr
Méthodes et propriétés publique de TRegExpr:
property Expression : string
Fonction
| Contient l'expression Régulière. Pour L'optimisation, TRegExpr va automatiquement le compiler en 'P-code' (vous pouvez le voir avec l'aide de la méthode Dump) et stocké dans sa structure interne. La vrai [re]compilation survient quand c'est réellement le cas - en appellant Exec[Next], Substitute, Dump, etc et seulement si l'expression ou un autre P-code a affecté les propriétés qui ont été changées après la dernière [re]compilation.
| Erreur
| Si une erreur survient durant la [re]compilation, une méthode d'erreur est appelée (par défaut une erreur d'exception est levée - voir plus bas).
|
property ModifierStr : string
Fonction
| Ajuste/récupère les valeurs par défaut des modifications d'e.r.. Le format de chaîne est similaire à (?ismx-ismx). Par exemple si ModifierStr := 'i-x' va mettre à On le modifier /i, à Off /x et laisser les autres inchangés.
| Valeurs Possibles
Valeurs par Défaut
Erreur
| Si vous essayez des modifications non supportées, une erreur sera appelée (par défaut les erreurs lève une exception dans ERegExpr).
|
property ModifierI : boolean
Fonction
Valeurs Possibles
| True | = Ignore les majuscules/minuscules.
|
| False | = Fait une distinction entre les majuscules/minuscules.
| Valeur par Défaut
Erreur
property ModifierR : boolean
Fonction
Valeurs Possibles
| True | = Active l'extension de syntaxe Russe.
|
| False | = Désactive l'extension de syntaxe Russe.
| Valeur par Défaut
Erreur
property ModifierS : boolean
Fonction
Valeurs Possible
| True | = Séparateur de ligne inclus pour le métacaractère ".".
|
| False | = Séparateur de ligne pas inclus pour le métacaractère ".".
| Valeur par Défaut
Erreur
property ModifierG : boolean;
Fonction
| Modifier /g. En le mettant à Off tous les opérateurs fonctionne en mode non-vorace, donc si ModifierG = Faux, alors '*' est comme '*?', tous les '+' comme '+?' et ainsi de suite, initialisé avec la valeur RegExprModifierG.
| Valeurs Possible
Valeur par Défaut
Erreur
property ModifierM : boolean;
Fonction
| Modifier /m Traite les chaînes comme des lignes multiples . Ceci fait, changer `^' et `$' de correspondre au début ou à la fin de la chaîne, à partir d'une nouvelle ligne ou à la fin d'une ligne, initialisé avec la valeur RegExprModifierM.
| Valeurs Possible
| Vrai | = Considère une nouvelle ligne ou la fin d'une ligne comme le début d'une chaîne.
|
| False | = Doit absolument être au début ou à la fin de la chaîne.
| Valeur par Défaut
Erreur
property ModifierX : boolean;
Fonction
Valeurs Possible
| Vrai | = Syntaxe étendue activé (des commentaires peuvent être insérés dans l'e.r.).
|
| False | = Syntaxe étendue désactivé (aucun commentaire possible).
| Valeur par Défaut
Erreur
function Exec (const AInputString : string) : boolean;
Fonction
| Compare une recherche à la chaîne AInputString.
| Note
| La fonction Exec stocke AInputString dans la propriété InputString.
|
function ExecNext : boolean;
Fonction
| Trouve l'occurrence suivante de Exec(AString);
| Note
| if MatchLen [0] = 0 then ExecPos(MatchPos [0] + 1)
|
| else ExecPos (MatchPos [0] + MatchLen [0]);
|
function ExecPos (AOffset: integer = 1) : boolean;
Fonction
| Trouve une occurrence de recherche pour de départ de InputString à partir de la position Aoffset (AOffset=1 - premier caractère de InputString).
|
property InputString : string;
Fonction
| Retourne le chaîne d'entrée courante (à partir du dernier appel de Exec ou de la dernière désignation de cette propriété).
| Note
| Une modification à cette propriété efface les propriétés Match* !
|
function Substitute (const ATemplate : string) : string;
Fonction
| Retourne ATemplate avec '$&' ou '$0' remplacé par l'occurrence complète de l'e.r. et '$n' remplacé par l'occurrence de la sous expression #n.
| Valeur de Retour
| Contient la chaîne avec les modification apportées.
| Note
| Depuis la v.0.929 '$' utiliser plutôt '\' (pour les futures extensions et pour plus de compatibilité avec Perl) pour accepter plus d'un caractère numérique.
|
| Si vous voulez placer le gabarit dans le modèle '$' ou '\', utiliser le préfixe '\'.
|
| Exemple: '1\$ is $2\\rub\\' -> '1$ est <Match[2]>\rub\'
|
| Si vous voulez placer un caractère numérique après '$n' vous devez délimiter n avec des accolades '{}'.
|
| Exemple: 'a$12bc' -> 'a<Match[12]>bc', 'a${1}2bc' -> 'a<Match[1]>2bc'.
|
procedure Split (AInputStr : string; APieces : TStrings);
Fonction
| Divise AInputStr en pièces dans APieces par les occurrences de l'e.r.
| Note
| Appelé au niveau interne Exec[Next].
|
function Replace (AInputStr : string; const AReplaceStr : string) : string;
Fonction
| Retourne AInputStr avec les occurrences de l'e.r remplacé par AReplaceStr
| Note
| Appelé au niveau interne Exec[Next].
|
property SubExprMatchCount : integer; // LectureSeulement
Fonction
| Le nombre de sous expressions qui a été trouvé dans la dernière exécution de Exec*.
| Valeur de Retour
| S'il n'y a aucune sous expression mais que l'expression complète à été trouvé (Exec* à retourné vrai), alors SubExprMatchCount=0, si aucune sous expression et aucune e.r. complète a été trouvé (Exec* retourne Faux) alors SubExprMatchCount=-1.
|
| Noter que quelques sous expressions peuvent ne pas être trouvées et pour de telles sous expressions, MathPos=MatchLen=-1 and Match=''.
|
| Par exemple: L'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 ('23'): SubExprMatchCount=2, Match[0]='23', [1]='', [2]='3'
|
| Exec ('2'): SubExprMatchCount=0, Match[0]='2'
|
| Exec ('7') - return False: SubExprMatchCount=-1
|
property MatchPos [Idx : integer] : integer; // LectureSeulement
Fonction
| La position d'entrée de la sous expression #Idx en test à la dernière exécution de Exec*.
| Paramètre
| La première sous expression a une valeur de Idx=1, dernière - MatchCount, l'e.r. a une valeur de Idx=0.
| Valeur de Retour
| Retourne -1 si dans l'e.r. il n'y a pas de sous expression trouvée dans la chaîne.
|
property MatchLen [Idx : integer] : integer; // Lecture Seulement
Fonction
| La longueur d'entrée de la sous expression #Idx e.r. en test à la dernière exécution de Exec*. La première sous expression a la valeur Idx=1, dernière - MatchCount, l'e.r. entière a une valeur de Idx=0.
| Valeur de Retour
| Retourne -1 si dans l'e.r. il n'y a pas de sous expression ou que cette expression n'as pas été trouvé dans la chaîne.
|
property Match [Idx : integer] : string; // Lecture Seulement
Fonction
| == copy (InputString, MatchPos [Idx], MatchLen [Idx])
| Valeur de Retour
| Retourne '' si dans l'e.r. il n'y a pas de sous expression ou que la sous expression n'as pas été trouvé dans la chaîne.
|
function LastError : integer;
Fonction
| Retourne l'ID de la dernière erreur, 0 s'il y a aucune erreur (inutilisable si l'erreur a générée une erreur d'exception) et efface la valeur interne à 0 (pas d'erreur).
|
function ErrorMsg (AErrorID : integer) : string; virtual;
Fonction
| Retourne un message d'erreur pour l'erreur avec ID = AErrorID.
|
property CompilerErrorPos : integer; // Lecture Seulement
Fonction
| Retourne la position dans l'e.r. ou le compilateur a stoppé. Très pratique pour diagnostiquer les erreurs.
|
property SpaceChars : RegExprString
Fonction
| Contient les caractères traités comme \s (initialement remplit avec les valeurs de la variable globale RegExprSpaceChars).
|
property WordChars : RegExprString;
Fonction
| Contient les caractères traités comme \w (initialement remplit avec les valeurs de la variable globale RegExprWordChars).
|
property LineSeparators : RegExprString
Fonction
| Les séparateurs de ligne (comme Unix \n), initialement remplit avec les valeurs de la variable globale RegExprLineSeparators). Voir aussi a propos des séparateurs de ligne.
|
property LinePairedSeparator : RegExprString
Fonction
| Paire de séparateur de ligne (pour le Dos et Windows \r\n). Doit contenir exactement deux caractères ou pas de caractères du tout, initialement remplit avec les valeurs de la variable globale RegExprLinePairedSeparato). Voir aussi a propos des séparateurs de ligne.
| Note
| Par exemple, si vous avez besoin du style Unix, assigner à LineSeparators := #$a (caractère de nouvelle ligne) et LinePairedSeparator := '' (chaîne vide), si par contre vous voulez accepter les séparateurs "\x0D\x0A" mais pas "\x0D" ou "\x0A" seul, alors assigner LineSeparators := '' (chaîne vide) et LinePairedSeparator := #$d#$a.
|
| Par défaut le mode 'mixe' est utilisé (définit par défaut dans les constantes globales RegExprLine[Paired]Separator[s]): LineSeparators := #$d#$a; LinePairedSeparator := #$d#$a. Le comportement de ce mode est décris dans la section syntaxe.
|
class function InvertCaseFunction (const Ch : REChar) : REChar;
Fonction
| Convertit Ch en majuscule si c'est minuscule et vice-versa (en utilisant les ajustement du système local).
|
property InvertCase : TRegExprInvertCaseFunction;
Fonction
| Ajuster cette propriété si vous voulez éviter la fonctionnalité de l'ignorance des minuscules/majuscules.
| Note
| Crée une interdiction à la fonction RegExprInvertCaseFunction (InvertCaseFunction par défaut).
|
procedure Compile;
Fonction
| [Re]compile l'e.r. Très pratique pour les applications qui utilise les éditeurs graphique pour vérifier la validité des propriétés.
|
function Dump : string;
Fonction
| Crée pour le visionnement une e.r. compilée en une forme plus compréhensive.
|
Constantes Globales
Valeurs par défaut des Modifiers:
RegExprModifierI : boolean = False; // TRegExpr.ModifierI
RegExprModifierR : boolean = True; // TRegExpr.ModifierR
RegExprModifierS : boolean = True; // TRegExpr.ModifierS
RegExprModifierG : boolean = True; // TRegExpr.ModifierG
RegExprModifierM : boolean = False; // TRegExpr.ModifierM
RegExprModifierX : boolean = False; // TRegExpr.ModifierX
RegExprSpaceChars : RegExprString = ' '#$9#$A#$D#$C;
// Valeur par défaut pour la propriété SpaceChars
RegExprWordChars : RegExprString =
'0123456789'
+ 'abcdefghijklmnopqrstuvwxyz'
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_';
// Valeur par défaut pour la propriété WordChars
RegExprLineSeparators : RegExprString =
#$d#$a{$IFDEF UniCode}#$b#$c#$2028#$2029#$85{$ENDIF};
// Valeur par défaut pour la propriété LineSeparators
RegExprLinePairedSeparator : RegExprString =
#$d#$a;
// Valeur par défaut pour la propriété LinePairedSeparator
RegExprInvertCaseFunction : TRegExprInvertCaseFunction = TRegExpr.InvertCaseFunction;
// Valeur par défaut pour la propriété InvertCase
Fonctions globales pratiques
function ExecRegExpr (const ARegExpr, AInputStr : string) : boolean;
Fonction
| Retourne vrai si la chaîne AInputString concorde à l'expression ARegExpr.
| Note
| !Va lever une exception s'il y a une erreur de syntaxe dans ARegExpr.
|
procedure SplitRegExpr (const ARegExpr, AInputStr : string; APieces : TStrings);
Fonction
| Sépare AInputStr en pièces dans APieces par les occurrences de l'e.r. ARegExpr.
|
function ReplaceRegExpr (const ARegExpr, AInputStr, AReplaceStr : string) : string;
Fonction
| Retourne AInputStr avec l'occurrence de l'e.r. remplacé par AReplaceStr.
|
function QuoteRegExprMetaChars (const AStr : string) : string;
Fonction
| Remplace tous les métacaractères avec une représentation simple, par exemple 'abc$cd.(' est converti en 'abc\$cd\.\('.
| Note
| Cette fonction est très pratique pour l'autogénération d'e.r. à partir d'entrée utilisateur.
|
function RegExprSubExpressions (const ARegExpr : string; ASubExprs : TStrings; AExtendedSyntax : boolean = False) : integer;
Fonction
| Fabrique une liste de sous expression trouvé dans l'e.r. ARegExpr.
| Note
| Dans ASubExps chaque item représente une sous expression, à partir de la première jusqu'à la dernière, dans le format:
|
| Chaîne | - texte de sous expression (sans les '()').
|
| bas mot de l'objet | - position de départ dans ARegExpr, incluant '(' s'il existe ! (la première position est 1).
|
| haut mot de l'objet | - La longueur, incluant le départ '(' et la fin ')' s'il existent!
|
| AExtendedSyntax | - Doit être Vrai si le modifier /x est à On durant l'utilisation de l'e.r.
|
| Utile pour les éditeurs avec interface graphique (Vous pouvez trouver un exemple d'utilisation dans le projet TestRExp.dpr).
|
| 0 | Succès. Pas de parenthèse non balancées trouvé.
|
| -1 | Il n'a pas assez de parenthèse de fermeture.
|
| -(n+1) | À la position n était trouvé '[' sans fermeture ']'.
|
| n | À la position n était trouvé ')' sans ouverture '('.
|
| Si le résultat <> 0, alors ASubExprs peut contenir des items vide ou de items illégaux.
|
Type d'exception
Routine par Défaut des erreurs d'exception pour TRegExpr:
ERegExpr = class (Exception)
public
ErrorCode : integer; // code d'erreur. Les erreurs de compilation du code sont avant 1000.
CompilerErrorPos : integer; // Position dans l'e.r. où l'erreur est survenue.
end;
Comment utiliser les Unicode
TRegExpr supporte maintenant les UniCode, mais il travaille très lentement.
Qui veut se risquer à l'optimiser ?
L'utiliser seulement si vous avez vraiment besoin du support des Unicode !
Pour utiliser les WideString, enlever le '.' dans {.$DEFINE UniCode} dans le fichier regexpr.pas.
|
|