J'ai quelques expressions régulières dans un script Perl qui sont correctes mais lentes. J'envisage d'essayer d'améliorer les performances en ajoutant des opérateurs supplémentaires (c'est-à-dire * + au lieu de * et ++ au lieu de +) pour désactiver le backtracking. J'ai essayé de les remplacer tous et les expressions régulières ont cessé de fonctionner ... autant pour la solution simple. Comment est-ce que je sais où je peux les ajouter où il ne cassera pas la regex?amélioration des performances de Perl regex en ajoutant +
Répondre
Si les regexes ont cessé de fonctionner, soit vous n » est t en utilisant une version de perl qui les supporte, ou vous avez réellement besoin de faire marche arrière dans ces cas. Identifier les sections de la regex qui n'auront jamais besoin d'un retour arrière (c'est-à-dire que si on leur demande de correspondre à partir d'un point donné, il n'y aura jamais plus d'une longueur) et les entourer avec (?> )
. Cela a le même effet que ++/* + et est supporté même avant 5.10. Notez que la restriction du retour arrière n'est souvent pas une "optimisation", car elle modifie ce qui sera et ce qui ne sera pas adapté. L'idée est que vous l'utilisiez pour mieux décrire ce que vous voulez réellement correspondre. Emprunter de l'article lié dans la réponse OP, quelque chose comme ^(.*?,){11}P
(douzième champ séparés par des virgules commence P) est non seulement inefficace, il est incorrect, puisque le retour arrière le fera correspondre même quand un seul champ après le douzième commence par P. En le corrigeant à ^(?>.*?,){11}P
, vous le restreignez à réellement correspondre au nombre correct de champs principaux. (Dans ce cas trivial, ^([^,]*,){11}P
fait également le travail, mais si vous ajoutez le support des virgules échappées ou entre guillemets dans les champs en utilisant l'alternance, (?>
devient le choix le plus facile.)
Hmmm ... une fois que je posté la question, en regardant la colonne « Related » m'a conduit à ce qui a quelques très bonnes idées .... http://www.regular-expressions.info/catastrophic.html
- 1. Amélioration des performances WCF
- 2. Amélioration des performances
- 3. Amélioration des performances de XSL
- 4. Amélioration des performances de System.DirectoryServices.AccountManagement
- 5. Amélioration des performances d'archivage ar
- 6. amélioration des performances d'un CATiledView
- 7. Amélioration des performances Grails-Commandline
- 8. Amélioration des performances de l'écriture MS Excel
- 9. Amélioration des performances de pagination pour gridview?
- 10. SqlCommand.Cancel() provoque une amélioration des performances?
- 11. Amélioration des performances de l'auto-jointure en sqlite
- 12. Amélioration des performances cURL (PHP Library)
- 13. Telerik RADControls pour WPF: Amélioration des performances
- 14. Amélioration des performances CoreGraphics sur iPhone4
- 15. Amélioration des performances sur ProfileManager.GetAllProfiles lors de l'utilisation de SqlProfileProvider
- 16. Amélioration des performances de cette fonction de création d'image
- 17. Amélioration des performances de téléchargement de fichiers sous Windows 2003
- 18. amélioration des performances de navigation de table dans jquery
- 19. Amélioration des performances de MSChart Toolip dans ASP.NET
- 20. Amélioration du code et des performances de l'interface utilisateur
- 21. Amélioration des performances de WebView (les performances doivent être identiques à celles du navigateur Web natif)
- 22. Amélioration des performances des services WCF fonctionnant avec des données en temps réel
- 23. Perl comme regex en Python
- 24. Amélioration des performances de la fusion de plusieurs cartes triées en une seule carte triée - java
- 25. Posix/Perl regex en php
- 26. Amélioration des performances de conservation des trois enregistrements récents de chaque requête de compte
- 27. Syntaxe de Perl Regex
- 28. Motif de correspondance et Regex en Perl
- 29. Amélioration significative des performances en utilisant des opérateurs au niveau du bit plutôt que des sommes entières en C#?
- 30. perl question précompilés regex
Pouvez-vous poster une partie de l'expression rationnelle nécessitant une optimisation? L'optimisation par exemple peut vous aider à mieux comprendre dans quels cas il convient d'utiliser certaines optimisations. – strager