Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment remplacer lookahead dans regex?

Il existe deux approches. L'une consiste à composer une seule expression qui gère toutes les alternatives possibles :

^[a-zA-Z][0-9][a-zA-Z0-9-,._;:]{6,}$
  |
^[a-zA-Z][a-zA-Z0-9-,._;:][0-9][a-zA-Z0-9-,._;:]{5,}$
  |
^[a-zA-Z][a-zA-Z0-9-,._;:]{2}[0-9][a-zA-Z0-9-,._;:]{4,}$

etc. C'est un cauchemar combinatoire, mais ça marcherait.

Une approche beaucoup plus simple consiste à valider deux fois la même chaîne à l'aide de deux expressions :

^[a-zA-Z0-9-,._;:]{8,}$          # check length and permitted characters

et

[a-zA-Z].*[0-9]|[0-9].*[a-zA-Z]  # check required characters

EDIT :@briandfoy souligne correctement qu'il sera plus efficace de rechercher chaque caractère requis séparément :

[a-zA-Z]                         # check for required alpha

et

[0-9]                            # check for required digit