Comment dois-je gérer regex caractéristiques marquées par "avertissement" comme "(? {Code})", "(?? {code})" ou "spécial Backtracking Verbs Control"? À quel point devrais-je prendre les avertissements?Comment gérer les entités regex étiquetées avec "warning"?
Répondre
Je pense qu'ils sont un peu là pour rester, d'une manière ou l'autre - en particulier le code échappe. Les fuites de code ont été avec nous pendant plus d'une décennie.
d'entre eux La frayeur - qu'ils peuvent appeler le code de façon imprévisible - est pris en charge par use re "eval"
. De plus, le regex matcher n'a pas été ré-introduit avant 5.12 IIRC, ce qui pourrait limiter leur utilité.
La version chaîne-évaluation, (??{ code })
, était la seule façon de faire de la récursivité, mais depuis 5.10, nous avons une bien meilleure façon de faire cela; L'analyse comparative des différences de vitesse montre que la méthode d'évaluation est beaucoup plus lente dans la plupart des cas.
J'utilise principalement la version de bloc-eval, (?{ code})
, pour ajouter le débogage, ce qui arrive à une granualarité différente de use re "debug"
. Ça me dérange vaguement que la valeur de retour de la version de bloc eval était pas utilisable, jusqu'à ce que je compris qu'il était . Il fallait juste l'utiliser comme une partie de test d'un modèle conditionnel, comme ce modèle pour tester si un nombre est composé de chiffres qui diminuaient par une chaque position à droite:
qr{
^(
(\p{Decimal_Number})
(?(?= (\d)) | $)
(?(?{ ord $3 == 1 + ord $2 }) (?1) | $)
) $
}x
Avant que j'ai compris conditionnels, j'aurais écrit que de cette façon:
qr{
^(
(\p{Decimal_Number})
(?= $ | (??{ chr(1+ord($2)) }))
(?: (?1) | $)
) $
}x
ce qui est beaucoup moins efficace.
Les verbes de contrôle des retours en arrière sont plus récents. Je les utilise principalement pour obtenir toutes les permutations possibles d'un match, et cela nécessite seulement (*FAIL)
. Je crois que c'est la caractéristique (*ACCEPT)
qui est particulièrement marquée "hautement expérimentale". Ceux-ci ont seulement été avec nous depuis 5.10.
- 1. Gérer correctement les entités transitoires dans NHibernate
- 2. Comment gérer tous les caractères ASCII (y compris les caractères spéciaux regex) dans une regex Perl?
- 3. Comment puis-je gérer une entité avec d'autres entités que les enfants sur différentes couches d'application
- 4. Comment gérer les caractères polonais lors de l'utilisation de regex?
- 5. Fixations étiquetées pour les associations dans Rails 3 en panne
- 6. initialisation élimine les qualificatifs ... sdl warning
- 7. Utilisez regex JavaScript pour remplacer les entités HTML numériques avec leurs caractères réels
- 8. Construire SEULEMENT des versions étiquetées avec CruiseControl.net ou TeamCity
- 9. Comment gérer les clés étrangères avec Entity Framework
- 10. Comment ajouter #pragma warning disable 1591 avec CodeDom
- 11. Microsoft warning _stprintf
- 12. checkstyle: disable ++ warning
- 13. Comment gérer efficacement les branches avec JIRA?
- 14. Comment gérer les fusions avec hgsubversion?
- 15. Comment gérer avec les ID dynamiques
- 16. Comment gérer mieux les clients avec TCPListener?
- 17. Comment gérer les dépendances dynamiques avec PicoContainer?
- 18. Fonctions stockées avec Linq pour les entités
- 19. Sélectionnez les non-entités avec JPA?
- 20. warning in uitableview
- 21. sprintf warning - encoding issue
- 22. XSD.exe warning-error
- 23. Comment utiliser les variables avec regex?
- 24. Comment désactiver les boutons radio avec regex?
- 25. Des façons élégantes de gérer les vues de base de données sur les entités hibernate?
- 26. Comment gérer les avertissements -Wconversion de GCC?
- 27. Comment gérer les exceptions?
- 28. Entités de sérialisation avec les services RIA
- 29. MVC2, annotation de données avec les entités?
- 30. Créer des drapeaux #warning personnalisés
({ord $ 3 == 1 + ord $ 2}): ce que cela arrête la regex si ce n'est pas vrai? –
@sid_com: Il teste true, en prenant la branche '(? 1)' si c'est le cas et le '$' sinon. – tchrist