2017-09-12 1 views
2

Encore une fois, j'ai besoin d'aide pour les motifs Lua. Disons que j'ai les chaînes suivantes:Partition texte Lua

<c> block - doit correspondre c et block

<category>material - doit correspondre category et material

decorative - s'il n'y a pas de bloc <> alors il doit retourner ce qu'il a été donné (ou nul).

Je ne suis pas intéressé par les espaces, donc la garniture intégrée serait bien.

J'ai réussi à créer (<%a>)([^>]+), mais il renvoie <c> et block dans le premier exemple, qui n'est malheureusement pas ce que je veux.

+1

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

Répondre

5

La partie (<%a>) de votre motif capture les chevrons et les place dans la valeur capturée. Le %a ne correspond qu'à un seul caractère alpha, vous devez donc ajouter le quantificateur + pour qu'il corresponde à un ou plusieurs caractères alpha.

Utilisez

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

Le %s* va correspondre 0+ caractères blancs et ils seront en dehors du groupe 2.

A Lua demo:

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

Les gens ici sont vraiment géniaux. Merci. – user2463506

+0

Juste ne pas utiliser vars globales dans la fonction :) – moteus

+0

@moteus OK, un one-liner maintenant :) –