Frage

Ist es möglich, in Lua zu erreichen?

local noSlashEnding = string.gsub("slash\\ending\\string\\", "\\|/$", "")
-- noSlashEnding should contain "slash\\ending\\string"

local noSlashEnding2 = string.gsub("slash/ending/string/", "\\|/$", "")
-- noSlashEnding2 should contain "slash/ending/string"

Der Punkt hier ist das nicht die Annahme der logischen ‚oder‘ Aussagen in Lua Mustern.


BEARBEITEN: Nur realisiert, was möglich ist, indem Sie diese:

strng.gsub("slash\\ending\\string\\", "[\\,/]$", "")

Obwohl logische ‚oder‘ für Muster noch fehlt.

War es hilfreich?

Lösung

Lua verwendet keine Standard reguläre Ausdrücke für Pattern-Matching. Ein Zitat aus dem Buch in Lua Programmierung den Grund erklärt:

  

Im Gegensatz zu einigen anderen Skriptsprachen, ist Lua nicht POSIX reguläre Ausdrücke (Wildcards) für den Mustervergleich verwenden. Der Hauptgrund dafür ist, Größe: Eine typische Implementierung von POSIX regexp dauert mehr als 4.000 Zeilen Code. Dies ist größer als alle Lua Standardbibliotheken zusammen. Im Vergleich dazu hat die Umsetzung von Musteranpassung in Lua weniger als 500 Zeilen. Natürlich kann das Pattern-Matching in Lua nicht alle, dass eine vollständige POSIX Implementierung der Fall ist. Dennoch ist in Lua Pattern-Matching ist ein mächtiges Werkzeug und enthält einige Funktionen, die nur schwer mit Standard-POSIX-Implementierungen entsprechen.

Es gibt jedoch viele Bindungen an bestehenden regelmäßigen Expressionsbibliotheken und auch die erweiterte LPeg Bibliothek. Eine Liste von ihnen mit Links finden Sie unter http://lua-users.org/wiki/LibrariesAndBindings, Kapitel Text processing.

Auch hierzu finden Sie diese Frage: Lua Mustervergleich vs. regulären Ausdrücken

Andere Tipps

Mustervergleich nicht das gleiche wie reguläre Ausdrücke ist und nicht über ein Wechsel-Konzept.

Zum Beispiel, wenn Sie wollte "abc" oder "efg" vom Ende eines Strings (ähnlich "(abc|efg)$" regulären Ausdruck) der folgende Code gut funktionieren würde, entfernen:

local inputstring="123efgabc"
local s,n = inputstring:gsub("abc$", "")
if n == 0 then
  s,n = inputstring:gsub("efg$", "")
end
print(s) --> 123efg

Lua reguläre Ausdrücke sind ... abnormal. Soweit ich aus der Dokumentation erzählen kann, gibt es keine Unterstützung für die allgemeinen Wechsel, noch für die Betreiber zu Gruppen Wiederholung angewandt wird. In Ihrem Fall, wie Sie sagen, können Sie bekommen, was Sie mit einer Zeichenklasse wollen (ich bin nicht sicher, was das Komma in Ihrer Zeichenklasse tut, obwohl).

Siehe hier: http://www.lua.org/ manual / 5.1 / manual.html # 5.4.1

(In einem Projekt habe ich auf arbeiten, wir schrieben unsere eigenen Lua zu PCRE Bindung, weil dieser.)

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