Comme il arrive souvent dans la pratique, la
spécification (ici,
l'énoncé) est imprécise :
accepte-on aussi des blancs
avant toute entité, et
après
?
Tout dépend du contexte dans lequel le problème est posé !
Nous adopterons l'interprétation stricte du texte : il est dit
entre
les entités, ni
avant, ni
après.
Aussitôt surgit un doute sur le sens précis de
blanc :
s'agit-il seulement du caractère ASCII n° 32 (octet
20
),
ou des divers caractères considérés comme
blank space, comme le
blanc, la tabulation, et les sauts de ligne ?
De nouveau, cela dépend du contexte !
Nous choisirons ici l'interprétation large, celle de l'abrévivation
standard "
\s
", en motivant ce choix par un projet :
celui d'extraire d'une page HTML comme
celle-ci tout le texte arabe, qui est entièrement
écrit en entités décimales
(pour le constater, examinez le texte-source de la page).
Voyez
le script Perl qui effectue cette tâche et
le résultat de notre extraction.
Si nous appelons
E l'expression régulière correspondant à une
entité individuelle,
E = "
&#[0-9]+;
",
notre expression est alors "
(
E\s*)*
E"
- le
E final étant nécessaire pour exclure les blancs
après
-
c'est-à-dire, sous forme développée "
(&#[0-9]+;\s*)*(&#[0-9]+;
)".
Dans l'automate, on doit donc dédoubler l'état 4 (terminal) pour
boucler sur les blancs.