2009-03-23 5 views
8

Hat jemand Code zum Finden einer Datei, die einen regulären Ausdruck enthält? Ich würde annehmen, dass Sie zwei verschiedene Geschmacksrichtungen haben könnten, einen für BREs und einen für EREs.Regulärer Ausdruck zum Finden eines regulären Ausdrucks?

Sie würden denken, dass eine Art von Test-Suiten so etwas wie einen isRegex() Test haben würde. Kann jemand Code haben? Auf der Suche nach etwas umfassendem natürlich.

Ich sehe, dass dies diskutiert wurde here, aber keine praktischen Antworten gesehen. Wenn ich nach einer Datei suchen möchte, die einen regulären Ausdruck enthält, vielleicht begrenzt durch das typische //, wie würde ich es tun?

+0

möglich Duplikat von [Gibt es einen regulären Ausdruck, um einen gültigen regulären Ausdruck zu erkennen?] (Http://stackoverflow.com/questions/172303/is-there-a-regular-expression-to-detect-a-valid -regular-Ausdruck) –

Antwort

18

Reguläre Ausdrücke sind selbst kein regular language. Der Hinweis ist, dass sie Klammern und eckige Klammern enthalten und dass diese ausgeglichen sein müssen.

Ein regulärer Ausdruck selbst kann durch eine context-free grammar beschrieben und mit einer recursive-descent parser geparst werden.

+0

+1 für die Richtigkeit. –

3

Jenseits

egrep '/.+/' file 

Sie zu einer wirklich beteiligt Übung suchen.

1

Wenn Sie speziell nach Dateien suchen, die nur oder überwiegend reguläre Ausdrücke enthalten, sollten Statistiken Ihnen sagen, dass eine bestimmte Datei mehr von dieser Syntax enthält als andere. Sie könnten also eine Reihe von Indikatoren definieren und ihre Punktzahlen zu einer Metrik kombinieren, die eine Datei mit der Wahrscheinlichkeit bewertet, dass sie von Interesse ist. Wähle einen Cutoff und lass ihn los. Einige Indikatoren:

  • Existenz von mehr als einer [0-9], [AZ], + etc
  • Existenz/foo/
  • kein Standard-Code-Datei
  • weniger komprimierbar (vertrackt, ich weiß, aber die Kompaktheit der regex Grammatik würde intuitiv härter sein als normale Wörter zu komprimieren)
  • etc

aber wenn dies nur ein One-Shot ist, dann sind Sie wahrscheinlich am besten dran Verwenden Sie Chaos's answer und manuelle Verringerung der Ergebnisse. Gibt es etwas Besonderes in den Regex (s), die Sie suchen, die leichter zu erlernen sind?