Aller au contenu principal

3. I-Regexp Syntax (Syntaxe I-Regexp)

3. I-Regexp Syntax (Syntaxe I-Regexp)

Un I-Regexp DOIT se conformer à la spécification ABNF de la figure 1.

i-regexp = branch *( "|" branch )
branch = *piece
piece = atom [ quantifier ]
quantifier = ( "*" / "+" / "?" ) / range-quantifier
range-quantifier = "{" QuantExact [ "," [ QuantExact ] ] "}"
QuantExact = 1*%x30-39 ; '0'-'9'

atom = NormalChar / charClass / ( "(" i-regexp ")" )
NormalChar = ( %x00-27 / "," / "-" / %x2F-3E ; '/'-'>'
/ %x40-5A ; '@'-'Z'
/ %x5E-7A ; '^'-'z'
/ %x7E-D7FF ; skip surrogate code points
/ %xE000-10FFFF )
charClass = "." / SingleCharEsc / charClassEsc / charClassExpr
SingleCharEsc = "\" ( %x28-2B ; '('-'+'
/ "-" / "." / "?" / %x5B-5E ; '['-'^'
/ %s"n" / %s"r" / %s"t" / %x7B-7D ; '{'-'}'
)
charClassEsc = catEsc / complEsc
charClassExpr = "[" [ "^" ] ( "-" / CCE1 ) *CCE1 [ "-" ] "]"
CCE1 = ( CCchar [ "-" CCchar ] ) / charClassEsc
CCchar = ( %x00-2C / %x2E-5A ; '.'-'Z'
/ %x5E-D7FF ; skip surrogate code points
/ %xE000-10FFFF ) / SingleCharEsc
catEsc = %s"\p{" charProp "}"
complEsc = %s"\P{" charProp "}"
charProp = IsCategory
IsCategory = Letters / Marks / Numbers / Punctuation / Separators /
Symbols / Others
Letters = %s"L" [ ( %s"l" / %s"m" / %s"o" / %s"t" / %s"u" ) ]
Marks = %s"M" [ ( %s"c" / %s"e" / %s"n" ) ]
Numbers = %s"N" [ ( %s"d" / %s"l" / %s"o" ) ]
Punctuation = %s"P" [ ( %x63-66 ; 'c'-'f'
/ %s"i" / %s"o" / %s"s" ) ]
Separators = %s"Z" [ ( %s"l" / %s"p" / %s"s" ) ]
Symbols = %s"S" [ ( %s"c" / %s"k" / %s"m" / %s"o" ) ]
Others = %s"C" [ ( %s"c" / %s"f" / %s"n" / %s"o" ) ]

Figure 1: Syntaxe I-Regexp en ABNF

En tant que restriction supplémentaire, charClassExpr n'est pas autorisé à correspondre à [^], qui, selon cette grammaire, serait analysé comme une classe de caractères positive contenant le caractère unique ^.

Il s'agit essentiellement d'une expression régulière XSD sans:

  • soustraction de classe de caractères (Character Class Subtraction),
  • échappements multi-caractères (Multi-Character Escapes) tels que \s, \S et \w, et
  • blocs Unicode (Unicode Blocks).

Une implémentation I-Regexp DOIT être une implémentation complète de ce sous-ensemble limité. En particulier, la prise en charge complète de la fonctionnalité Unicode définie dans cette spécification est REQUISE. L'implémentation:

  • NE DOIT PAS se limiter à des jeux de caractères 7 ou 8 bits tels que ASCII, et
  • DOIT prendre en charge l'ensemble de propriétés de caractères Unicode dans les classes de caractères.

3.1 Checking Implementations (Implémentations de vérification)

Une implémentation I-Regexp de vérification (Checking) est une implémentation qui vérifie la conformité d'une expression régulière fournie avec cette spécification et signale tout problème. Les implémentations de vérification donnent à leurs utilisateurs la confiance qu'ils n'ont pas accidentellement inséré une syntaxe qui n'est pas interopérable, donc la vérification est RECOMMANDÉE. Des exceptions à cette règle peuvent être faites pour les implémentations à faible effort qui mappent I-Regexp vers une autre bibliothèque d'expressions régulières par des étapes simples telles que l'exécution des opérations de mappage discutées dans la section 5. Ici, l'effort nécessaire pour effectuer une vérification complète pourrait éclipser le reste de l'effort d'implémentation. Les implémentations DEVRAIENT documenter si elles effectuent ou non une vérification.

Les spécifications qui utilisent I-Regexp peuvent souhaiter définir dans quels cas leurs implémentations peuvent fonctionner avec une implémentation I-Regexp sans vérification et quand une vérification complète est nécessaire, éventuellement dans le processus de définition de leurs propres classes d'implémentation.