Ruby - Regex für passende Klammern?

Ich versuche herauszufinden, ob ein string hat richtig geschlossen Klammern.

Dazu verwende ich die folgenden drei Klammerpaare.

[]
()
{}

Die Klammern können auch verschachtelt werden, solange Sie richtig formatiert.

)([]{} - Does not have properly closed brackets because )( is reverse order

[()] - Does contain properly closed brackets.

Habe ich versucht mit regex und nach ein wenig Fummelei, ich habe diese.

[^\(\[]*(\(.*\))[^\)\]]*

Allerdings gibt es ein paar Probleme mit diesem.

Es entspricht nur der Klammern, aber nicht mit Klammern

Ich verstehe nicht, warum es nicht passen die Klammern.

In meinen Beispielen habe ich deutlich verwendet einen backslash vor der Klammer.

Eingang

[] - true
[()] - true (nested brackets but they match properly)
{} - true
}{ - false (brackets are wrong direction)
}[]} - false (brackets are wrong direction)
[[]] - true (nested brackets but they match properly
  • Wie wärs, wenn du uns zeigen, einige Eingänge und erwarteten Ausgänge.
  • es ist unmöglich für regex . Sie müssen aktualisiert Ihre Frage mit diesem input ([][()]{}{{}[]})
  • Sie sind absolut falsch.
  • Warum......?
  • Es ist möglich,.
  • durch regex nur?
  • Ja.
  • Wo ist der regex? Meinst du deine regex?
  • auch wenn möglich mit freaky rekursive Muster, Sie können nicht widersprechen, es ist sicherlich nicht eine gute Aufgabe für eine regex. Es kann durchgeführt werden in O(n) mit einem einfachen stack parser wie vorgeschlagen von Jeff Preis
  • Das heißt ignoratio elenchi. Aber zumindest scheinen Sie zu wissen, besser als Avinash Raj.
  • darüber will ich nicht streiten, es ist sicherlich unmöglich und nie. Nur wollten das Gespräch ein Hinweis in eine produktivere Richtung. Aber der Nachweis von einer reinen regex-Lösung (arbeiten mit rubys regex-engine) ist nicht überall in den Antworten, aber entweder.
  • Alles was ich Tat wurde festgestellt, Menschen, die AvinashRaj Behauptung ist absolut falsch, so dass Sie nicht lernen, etwas falsch.
  • die Sprache des strings mit passenden Klammern ist nicht regelmäßig. streng sprechen eine Sprache, die Erweiterung zu entsprechen, dies ist kein regulärer Ausdruck ist.
  • Was ist Ihr plan für eine ausgewogene, aber falsch verschachtelte Zeichen? Zum Beispiel balanced? '[{(])}' im Allgemeinen true zurückgeben, es sei denn, du bist parsing-Grammatik.
  • Bitte Lesen Sie die Antworten. Ich geschrieben funktionierende Lösung basiert auf rekursiven regexp. Durch die Art und Weise, regex-Lösung in O(n) Zeit, wenn auch vielleicht mit größeren Konstante.

InformationsquelleAutor Johnson | 2014-09-22
Schreibe einen Kommentar