2013-06-30 11 views
8

In Lua c'è solo string.find, ma a volte è necessario string.rfind. Ad esempio, per analizzare directory e il percorso del file come:Come implementare string.rfind in Lua

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

come scrivere ad string.rfind?

risposta

5

È possibile utilizzare string.match:

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

Qui nel modello, .* è avido, in modo che possa corrispondere a tanto quanto possibile prima che corrisponda /

UPDATE:

Come sottolinea @Egor Skriptunoff, è meglio:

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

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

2

Yu & La risposta di Egor funziona. Un'altra possibilità usando find potrebbe essere quella di invertire la stringa:

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

Questo dà lo stesso risultato: 'pos = s: Match'. *()/' ' –