2013-06-30 6 views
8

In Lua gibt es nur string.find, aber irgendwann string.rfind wird benötigt. Zum Beispiel, Verzeichnis und Dateipfad wie zu analysieren:Wie zu implementieren string.rfind in Lua

fullpath = "c:/abc/def/test.lua" 
pos = string.rfind(fullpath,'/') 
dir = string.sub(fullpath,pos) 

Wie solche string.rfind schreiben?

Antwort

5

können Sie string.match verwenden:

fullpath = "c:/abc/def/test.lua" 
dir = string.match(fullpath, ".*/") 
file = string.match(fullpath, ".*/(.*)") 

Hier im Muster, .* gierig ist, so dass es so viel übereinstimmen, wie es kann, bevor es passt /

UPDATE:

Wie @Egor Skriptunoff darauf hinweist, ist dies besser:

dir, file = fullpath:match'(.*/)(.*)' 
+1

dir, file = fullpath: '(. * /) (*).' Match –

2

Yu & Egor Antwort funktioniert. Eine andere Möglichkeit finden Verwendung wäre die Zeichenfolge zu umkehren:

pos = #s - s:reverse():find("/") + 1 
+0

Dies ergibt das gleiche Ergebnis: 'pos = s: Spiel‘. *()/'' –