Se vi interessa soltanto che la stringa non si esaurisce con .jpg
o .png
, è possibile utilizzare questo:
^.+$(?<!\.jpg)(?<!\.png)
Il ^.+
non è strettamente necessario, ma a seconda di come il parser JSON è codificato voi potrebbe essere necessario forzare la regex per consumare l'intera stringa. Se si utilizza l'espressione regolare per gli altri convalide così, si potrebbe desiderare qualcosa di più elaborato, come:
^\w+(?:\.\w+)+$(?<!\.jpg)(?<!\.png)
Probabilmente è tentato di utilizzare (?<!\.jpg|\.png)
, che non avrebbe funzionato perché il sapore regex di Python è uno dei più restrittivo quando si tratta di lookbehinds. PHP e Ruby 1.9+ lo accetterebbero perché ognuna delle alternative ha una lunghezza fissa. Non devono nemmeno essere la stessa lunghezza; (?<!\.jpg|\.jpeg|\.png)
funzionerebbe anche. Basta non provare a calcolare il punto, come in (?<!\.(?:jpg|jpeg|png))
; l'alternanza deve essere al livello più alto del lookbehind.
Java accetta la versione con scomposizione del carico poiché fa un po 'più di lavoro in fase di compilazione per determinare il numero massimo di caratteri che il lookbehind potrebbe dover corrispondere. L'espressione lookbehind deve tuttavia essere abbastanza semplice e non può utilizzare i quantificatori +
o *
. Infine, i gusti .NET e JGSoft non impongono alcuna restrizione sui lookbehind. Ma Python fa un tentativo molto semplice di capire il numero esatto di caratteri che il lookbehind deve corrispondere, generando quel criptico messaggio di errore quando fallisce.
fonte
2012-04-07 15:23:30
ottimo lavoro! eccellente – yash