2009-03-23 16 views
8

Est-ce que quelqu'un a du code pour trouver un fichier qui contient une expression régulière? Je suppose que vous pourriez avoir deux saveurs différentes, une pour les BRE et une pour les ERE.Expression régulière pour trouver une expression régulière?

On pourrait penser que certaines suites de tests auraient quelque chose comme un test isRegex(). Quelqu'un peut-il avoir du code? Vous cherchez quelque chose de complet bien sûr.

Je vois que cela a été discuté here mais n'a pas vu de réponses pratiques. Si je veux grep pour n'importe quel fichier qui contient une expression régulière, peut-être limitée par le // typique, comment le ferais-je?

+0

duplication possible de [Existe-t-il une expression régulière pour détecter une expression régulière valide?] (Http://stackoverflow.com/questions/172303/is-there-a-regular-expression-to-detect-a-valid -regular-expression) –

Répondre

18

Les expressions régulières ne sont pas elles-mêmes regular language. L'indice est qu'ils contiennent des parenthèses et des crochets et ceux qui doivent être équilibrés.

Une expression régulière elle-même peut être décrite par un context-free grammar et analysée par un recursive-descent parser.

+0

+1 pour l'exactitude. –

3

Au-delà

egrep '/.+/' file 

vous cherchez à un exercice vraiment impliqué.

1

Si vous recherchez spécifiquement des fichiers contenant uniquement ou principalement des expressions régulières, les statistiques doivent vous indiquer qu'un certain fichier contient plus de cette syntaxe que d'autres. Vous pouvez donc définir un ensemble d'indicateurs et combiner leurs scores en une métrique qui a classé un fichier sur la probabilité qu'il soit intéressant. Choisissez un cutoff et laissez-le partir. Quelques indicateurs:

  • Existence de plus d'un [0-9], [AZ], + etc
  • Existence de/foo/
  • Pas un fichier de code standard
  • moins compressible (louches, Je sais, mais la compacité de la grammaire regex serait intuitivement plus difficile à comprimer que des mots normaux)
  • etc

mais si cela est juste un one-shot, alors vous êtes probablement mieux loti en utilisant Chaos's answer et en réduisant manuellement les résultats. Y a-t-il quelque chose de particulier dans l'expression (re) que vous cherchez, qui pourrait être plus facile à comprendre?