Sous-routine regcmp ou regex
Objectif
Compile et correspond aux modèles d'expression régulière.
Bibliothèques
Bibliothèque C standard ( libc.a )
Bibliothèque Programmers Workbench (libPW.a)
Syntaxe
Descriptif
La sous-routine regcmp compile une expression régulière (ou Motif) et renvoie un pointeur vers la forme compilée. La sous-routine regcmp autorise plusieurs paramètres String . Si plusieurs paramètres String sont indiqués, la sous-routine regcmp les traite comme s'ils étaient concaténés. Il renvoie un pointeur null s'il rencontre un paramètre incorrect.
Vous pouvez utiliser la commande regcmp pour compiler des expressions régulières dans votre programme C, ce qui élimine souvent la nécessité d'appeler la sous-routine regcmp lors de l'exécution.
La sous-routineregex compare un modèle compilé à la chaîne Subject . Des paramètres supplémentaires sont utilisés pour recevoir des valeurs. Une fois l'opération terminée, la sous-routineregex renvoie un pointeur vers le caractère sans correspondance suivant. Si la sous-routineregex échoue, un pointeur null est renvoyé. Un pointeur de caractère global, __loc1, pointe vers l'endroit où la correspondance a commencé.
Les sous-routines regcmp et regex sont empruntées à la commande ed , mais la syntaxe et la sémantique ont été légèrement modifiées. Vous pouvez utiliser les symboles suivants avec les sous-routines regcmp et regex :
| Article | Descriptif |
|---|---|
[ ] * . ^ |
Ces symboles ont la même signification que dans la commande ed . |
- |
Le signe moins (ou trait d'union) entre crochets utilisés avec la sous-routineregex signifie "jusqu'à", selon la séquence de classement en cours. Par exemple, [ a-z ] peut être équivalent à [abcd . . . xyz] ou [aBbCc . . . xYyZz]. Vous pouvez utiliser le-par lui-même si le-est le dernier ou le premier caractère. Par exemple, l'expression de classe de caractères [ ]-] correspond aux caractères ] (crochet droit) et-(moins).La sous-routine regcmp n'utilise pas la séquence de classement en cours et le signe moins entre crochets contrôle uniquement une séquence ASCII directe. Par exemple, [ a-z ] signifie toujours |
$ |
Correspond à la fin de la chaîne. Utilisez le caractère \n pour qu'il corresponde à un caractère de nouvelle ligne. |
+ |
Une expression régulière suivie de + (signe plus) signifie une ou plusieurs fois. Par exemple, [ 0-9 ] + est équivalent à [ 0-9 ] [ 0-9 ] *. |
{ m} {m,} {m,
u} |
Les valeurs entières incluses dans {} (accolades) indiquent le nombre de fois où l'expression régulière précédente doit être appliquée. Le caractère m est le nombre minimal et le caractère u est le nombre maximal. Les caractères u doivent être inférieurs à 256. Si vous spécifiez uniquement m, il indique le nombre exact de fois où appliquer l'expression régulière. {m,} est équivalent à {m,u} et correspond à m ou à plusieurs occurrences de l'expression. Les opérations + (signe plus) et * (astérisque) sont équivalentes à {1,} et {0,}, respectivement. |
( . . . )$n |
Stocke la valeur qui est mise en correspondance par l'expression régulière incluse dans le paramètre (n+ 1) th ret . Dix expressions régulières fermées sont autorisées. La sous-routineregex effectue les affectations sans condition. |
( . . . ) |
Parenthèses de sous-expressions de groupe. Un opérateur, tel que *, +, ou [
] , fonctionne sur un caractère unique ou sur une expression régulière placée entre parenthèses. Par exemple, (a*(cb+)*)$0. |
Tous les symboles définis ci-dessus sont spéciaux. Faites-les précéder d'une barre oblique inversée ( \ ) si vous souhaitez faire correspondre le symbole spécial lui-même. Par exemple, \ $ correspond à un signe dollar.
/* . . . Your Program . . . */
malloc(n)
int n;
{
static int rebuf[256] ;
return ((n <= sizeof(rebuf)) ? rebuf : NULL);
} La sous-routine regcmp génère des valeurs de code que la sous-routineregex peut interpréter comme l'expression régulière. Par exemple, [ a-z ] indique une expression de plage, que la sous-routine regcmp compile en une chaîne contenant les deux points de terminaison (a et z).
La sous-routineregex interprète l'instruction de plage en fonction de la séquence de classement en cours. L'expression [ a-z ] peut être équivalente à [abcd . . . Xyz] ou à [aBbCcDd . . . xXyYzZ], à condition que le caractère précédant le signe moins ait une valeur de classement inférieure au caractère suivant le signe moins.
Le comportement d'une expression de plage dépend de la séquence de classement. Si vous souhaitez faire correspondre un jeu de caractères Spécifique , vous devez en dresser la liste. Par exemple, pour sélectionner les lettres a, b ou c, utilisez [abc] plutôt que [a-c].
- Aucune hypothèse n'est faite au moment de la compilation concernant les caractères réels contenus dans la plage.
- N'utilisez pas de caractères multi-octets.
- Vous pouvez utiliser le
](crochet de droite) lui-même dans une paire de crochets s'il suit immédiatement le[(crochet de gauche) ou[^(crochet de gauche suivi immédiatement d'un accent circonflexe). - Vous pouvez également utiliser le signe moins (ou trait d'union) s'il s'agit du premier ou du dernier caractère de l'expression. Par exemple, l'expression
[ ] -0]correspond au crochet droit( ] ),ou aux caractères-jusqu'à 0.
Paramètres
| Article | Descriptif |
|---|---|
| Sujet | Indique une chaîne de comparaison. |
| Chaîne | Indique le Modèle à compiler. |
| Schéma | Indique l'expression à comparer. |
| Ret | Pointe vers une adresse où stocker des données de comparaison. La sous-routineregex autorise plusieurs paramètres ret String . |