2017-09-12 2 views
2

Wieder brauche ich Hilfe mit Lua-Mustern. Lets sagen, dass ich folgende Saiten haben:Lua Muster Text geteilt

<c> block - sollte

<category>materialc und block entsprechen - category und material

decorative entsprechen sollte - wenn es keine <> Block ist, dann sollte es zurückgeben, was es gegeben wurde (oder nil).

Ich bin nicht in Räumen interessiert, so in Trimm gebaut wäre schön.

konnte ich (<%a>)([^>]+) schaffen, aber es gibt <c> und block in erstem Beispiel whish leider nicht, was ich nach bin.

+1

Try '<(%a+)>% s * ([^ >] +) ' –

Antwort

5

Der (<%a>) Teil in Ihrem Muster erfasst die spitzen Klammern, so dass sie im erfassten Wert landen. Die %a stimmt nur mit einem Alpha-Zeichen überein, daher müssen Sie + Quantifizierer hinzufügen, um 1 oder mehr Alpha-Zeichen zu entsprechen.

Verwenden

<(%a+)>%s*([^>]+) 

Die %s* wird passen 0+ Leerzeichen Zeichen und werden sie außerhalb der Gruppe 2

A Lua demo sein:

local function splitString(text) 
    return string.match(text, "<(%a+)>%s*([^>]+)") 
end 

print(splitString("<c> block"))   -- c block 
print(splitString("<category>material")) -- category material 
print(splitString("decorative"))   -- nil 
+0

Die Leute hier sind wirklich Genie. Vielen Dank. – user2463506

+0

Verwenden Sie einfach nicht globale Vars innerhalb der Funktion :) – moteus

+0

@moteus OK, ein One-Liner jetzt :) –