2 votes

Lua modèle texte fractionné

Encore une fois, j'ai besoin d'aide avec les modèles Lua. Disons que j'ai les chaînes suivantes :

bloc - devrait correspondre à c et block

matériel - devrait correspondre à category et material

décoratif - s'il n'y a pas de bloc <>, alors il devrait retourner ce qu'il a reçu (ou nil).

Je ne suis pas intéressé par les espaces, donc une suppression automatique des espaces serait appréciée.

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

5voto

Wiktor Stribiżew Points 100073

La partie (<%a>) dans votre motif capture les crochets d'angle, donc ils se retrouvent dans la valeur capturée. Le %a correspond à un seul caractère alpha, donc vous devez ajouter le quantificateur + après pour qu'il corresponde à 1 ou plusieurs caractères alpha.

Utilisez

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

Le %s* correspondra à 0+ caractères d'espacement et ils seront en dehors du Groupe 2.

Un démonstration Lua:

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

print(splitString(" block"))           -- c  block
print(splitString("material"))  -- category   material
print(splitString("decorative"))          -- nil

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X