Eh bien, vous pouvez théoriquement construire une regex qui correspond à l'opposé. Mais pour des chaînes plus longues, cette regex deviendrait grande. La façon dont vous le faire est systématiquement (très simplifié):
- Convertir l'expression régulière dans un automate fini déterministe
- Convertir les conditions de fin de l'automate, de sorte qu'il accepte la langue régulière inversée
- Convertissez l'automate en une expression régulière en supprimant successivement les nœuds de l'automate, tout en conservant le même comportement. La suppression d'un nœud nécessitera la mise en place de deux ou plusieurs expressions régulières, de manière à rendre compte du nœud supprimé.
- Si vous avez un noeud de début et un noeud de fin, vous avez terminé: L'expression régulière qui marque le bord entre eux est votre expression régulière recherchée.
Pratiquement, vous pouvez simplement correspondre à la chaîne que vous voulez pas avoir en elle, et inverser le résultat. Voici ce qu'il ressemblerait à awk:
echo azyxbc | awk '{ exit ($0 !~ /a.*b.*c/); }' && echo matched
Si vous êtes intéressé à cela, je recommande le livre « Introduction à la théorie du calcul » par Michael Sipser.
quel moteur utilisez-vous? – Loki
Tout, à la recherche d'une expression régulière générale qui peut être adaptée à n'importe quel moteur. Je cherchais vraiment une réponse théorique. – Ray