Wie passe ich reguläre Ausdrücke richtig an?

8

Ich habe eine Liste von Objekten, die wie folgt von ldapsearch ausgegeben werden:

%Vor%

Bisher habe ich die folgende Regex:

%Vor%

Was Ergebnisse wie folgt zurückgibt:

%Vor%

Ich brauche eine Regex, die Ergebnisse wie folgt zurückgibt:

%Vor%

Was muss ich in meiner Regex ändern, damit das Muster ( cn= und das Komma) nicht in den Ergebnissen enthalten ist?

BEARBEITEN: Ich werde sed verwenden, um den Mustervergleich durchzuführen und die Ausgabe an andere Befehlszeilenprogramme weiterzuleiten.

    
eleven81 26.01.2009, 17:56
quelle

7 Antworten

-1

Klingt eher wie ein einfaches Analyseproblem und nicht als Regex. Eine ANTLR-Grammatik würde das in kürzester Zeit erledigen.

    
duffymo 26.01.2009, 17:59
quelle
13

Sie müssen eine Gruppierung durchführen. Dies geschieht, indem die Regex zu:

geändert wird %Vor%

Dies wird dann Ihr Ergebnis in eine Gruppierungsvariable auffüllen. Abhängig von Ihrer Sprache unterscheidet sich der Wert. (Für Sie mit sed wird die Variable \ 1)

sein

Beachten Sie, dass Sie bei den meisten Regex-Varianten nicht die eckigen Klammern () entfernen müssen, aber da Sie sed verwenden, müssen Sie wie oben gezeigt vorgehen.

Für eine hervorragende Quelle für reguläre Ausdrücke empfehle ich: Reguläre Ausdrücke beherrschen

    
Gavin Miller 26.01.2009 18:00
quelle
4

OK, der Ort, an dem Sie die spezifischere Frage gestellt haben, wurde als "exaktes Duplikat" abgeschlossen, also kopiere ich meine Antwort von hier nach hier:

Wenn Sie sed verwenden möchten, können Sie Folgendes verwenden:

sed -e 's/dn: cn=\([^,]*\),.*$//'

Sie müssen [^,]* verwenden, weil in% sed .* "gierig" ist, was bedeutet, dass alles übereinstimmt, bevor Sie ein beliebiges anderes Zeichen betrachten. Das heißt, wenn Sie \(.*\), in Ihrem Muster verwenden, wird es bis zum letzten Komma passen, nicht bis zum ersten Komma.

    
Eddie 26.01.2009 18:41
quelle
2

Check out Expresso Ich habe es in der Vergangenheit verwendet, um meine RegEx zu erstellen. Es ist gut, beim Lernen zu helfen.

    
Brawndo 26.01.2009 18:00
quelle
2

Die schnellste und schmutzigste Methode ist die Verwendung von Unterübereinstimmungen, vorausgesetzt, Ihr Modul unterstützt dies:

%Vor%

Dann möchten Sie das erste Submatch bekommen.

    
EBGreen 26.01.2009 18:01
quelle
2

Ohne zu wissen, welche Sprache Sie verwenden, können wir nicht sicher sagen, aber in den meisten regulären Ausdrucksparsern, wenn Sie Klammern verwenden, wie zum Beispiel

/ \ bcn = (\ w *), / g

Dann werden Sie in der Lage sein, das erste übereinstimmende Muster (oft \ 1) als genau das zu erhalten, nach dem Sie suchen. Um genauer zu sein, müssen wir wissen, welche Sprache Sie verwenden.

    
Eddie 26.01.2009 18:01
quelle
2

Wenn Ihre Regex Lookaheads und Lookbehinds unterstützt, können Sie

verwenden %Vor%

Das passt zu

%Vor%

Aber nicht cn= oder , auf beiden Seiten. Das Komma und cn= müssen immer noch für das Match da sein, es ist einfach nicht im Ergebnis enthalten.

    
Grant 26.01.2009 18:52
quelle

Tags und Links