'/^((?!^azerty)[a-zA-Z0-9])$/'
logiquement, il manque un +
Si l’expression est
/^((?!^azerty)[a-zA-Z0-9])+$/
alors elle est mal écrite parce qu’elle oblige le moteur de regex à examiner pour chaque caractère scruté s’il est le début d’une séquence '^azerty'.
Or , pour tous les autres caractères que le premier, il ne peut y avoir matching de ’^azerty’ avec une séquence commençant par un caractère interne.
Si l’expression est
/^((?!^azerty)[a-zA-Z0-9]+)$/
alors elle est encore mal écrite puisque, étant donné la situation de (?!^azerty) dans la RE, cette assertion ne sera testée qu’en tête de la chaîne explorée (c’est à dire à la position 0). Le deuxième ^ est alors redondant.
Je pense plus correct d’écrire la RE comme suit
/^(?!azerty)([a-zA-Z0-9]+)$/
Tordu et marrant:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import re
chW = 'Wazertygertrudemonin'
ch = 'azertygertrudemonin'
patchapeau = re.compile('^([a-zA-Z0-9](?<!^azerty))+$')
print patchapeau.search(chW)
print patchapeau.search(ch)
print '-----------------------------------'
pat = re.compile('^([a-zA-Z0-9](?<!azerty))+$')
print pat.search(chW)
print pat.search(ch) |
résultat
<_sre.SRE_Match object at 0x010AEF20>
None
-----------------------------------
None
None
C’est pour montrer que la forme (?<!^azerty) est comprise par le moteur de regex, mais que pour le mettre en évidence, il faut une RE tordue.
Je ne crois pas qu’il puisse y avoir un cas où l'on soit obligé de recourir à la forme (?!^xxxxxx ). Le placement de (?!xxxxxx ) après le signe ’^’ situé en tête d’une RE suffit à exprimer l’exclusion de ’xxxxxx’ comme début de chaîne.
==========================
Pour le problème de smain46,
- je n’ai pas compris s’il faut vérifier l’absence de ’test’ en tête de chaîne ou n’importe où dans le texte.
- je me demande pourquoi il y a un $ au milieu de la RE
- je ne sais pas ce que peut être une regex comme pattern dans un XML schéma
Partager