Lua Muster zum Extrahieren / ersetzen Wert in / /
-
30-09-2019 - |
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.
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