Frage

Ich habe eine Zeichenfolge wie hello /world today/

Ich brauche zu ersetzen /world today/ mit /MY NEW STRING/

Lesen Sie das Handbuch habe ich gefunden

newString = string.match("hello /world today/","%b//")

, die ich mit gsub verwenden kann, zu ersetzen, aber ich fragte mich, gibt es auch eine elegante Möglichkeit, nur den Text zwischen dem / zurückzukehren, ich weiß, dass ich es nur trimmen könnte, aber ich fragte mich, ob es ein Muster war.

War es hilfreich?

Lösung

Versuchen Sie so etwas wie eine der folgenden:

  • slashed_text = string.match("hello /world today/", "/([^/]*)/")
  • slashed_text = string.match("hello /world today/", "/(.-)/")
  • slashed_text = string.match("hello /world today/", "/(.*)/")

Das funktioniert, weil string.match alle Captures zurück von dem Muster oder dem gesamten Text abgestimmt, wenn es keine Aufnahmen. Der Schlüssel dann ist, um sicherzustellen, dass das Muster die richtige Menge an Gefräßigkeit hat, daran erinnert, dass Lua Muster sind keine vollständige Sprache für reguläre Ausdrücke.

Die ersten beiden sollten die gleichen Texte entsprechen. In dem ersten habe erforderlich ich ausdrücklich, dass das Muster Spiel so viele Nicht-Schrägstriche wie möglich. Der zweite (dank lhf) mit der kürzesten Zeitspanne von beliebigen Zeichen überhaupt einen Schrägstrich. Die dritte ist gieriger, es die längste Spanne von Zeichen entspricht, die noch durch einen Schrägstrich gefolgt werden kann.

Die %b// in der ursprünglichen Frage hat keine Vorteile gegenüber /.-/ da die die beiden Begrenzungszeichen den gleichen Charakter sind.

Edit:. ein Muster von lhf vorgeschlagen hinzugefügt, und weitere Erklärungen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top