Problème avec le format cloze

Re: Problème avec le format cloze

par Valery Fremaux,
Nombre de réponses : 0

Bonjour Etienne,

moi aussi j'ai quelques soucis avec Cloze (balises qui sautent complètement, des erreurs php si il n'y a aucune balise dans le texte). Je vais y mettre le nez après avoir testé les patches proposés.

Pour info, j'ai fait une petite traduction des spec REGEX* pour les look-ahead et les look-behind (c'est une définition POSIX des "ectended regex", donc en principe celle qui est implémentée aussi dans php)

origine : la documentation du Perl qui est excellente, mais ardue.


(?:pattern)

(?imsx-imsx:pattern)

Pour grouper des séquences caractères, sans capturer ; les expressions sont regroupées comme dans des parenthèses normales '()', mais ne produisent pas des sous-motifs comme le fait '()' does. Donc

(?=pattern)

Une assertion de largeur nulle en "look-ahead" (test sur ce qui suit). Par exemple, preg_match("/\w+(?=\t)/", $var, $matches) trouve un mot SUIVI PAR une tabulation, mais sans prendre en compte la tabulation dans le motif $matches[0].

(?!pattern)

La négation de la prcédente. Par exemple preg_match("/foo(?!bar)/", $var, $matches) trouve toute occurrence de 'foo' qui n'EST PAS SUIVI PAR 'bar'. Notez que "look-ahead" et "look-behind" ne sont PAS identiques. Vous ne pouvez utiliser cette forme pour du "look-behind" : Si vous cherchez 'bar' non précédé par 'foo', /(?!foo)bar/ ne fera pas ce que vous pensez. La forme (?!foo) dit juste que "ce qui suit ne doit pas être 'foo'" -- mais ne dit pas, c'est 'bar', et donc 'foobar' sera détecté. Vous devrez écrire plutôt quelque chose comme /(?!foo)...bar/ pour ce type de détection.

(?<=pattern)

Une assertion de largeur nulle en "look-behind" (test sur ce qui précède). Par exemple, preg_match("/(?<=\t)\w+/", $var, $matches) le mot QUI SUIT une tabulation, sans inclure la tabulation dans le motif résultat. Ne fonctionne que pour un motif "look-behind" de largeur fixe.

(?<!pattern)

L'inversion de la précédente. Par exemple pregmatch("/(?<!bar)foo/", $var, $matches) trouve toute occurrence de 'foo' QUI NE SUIT PAS 'bar'. Ne fonctionne que pour un motif "look-behind" de largeur fixe.