Le type de données str est un ensemble de caractères, tels que les lettres, les numéros et les symboles. C'est le type de données pour stocker la plupart des informations basées sur le texte.
Déclarer des chaînes
Pour déclarer une variable de chaîne, mettez des guêtes autour des caractères. Il est plus courant d'utiliser des guêtes doubles ( " ) mais des guêtes simples ( ' ) fonctionnent également. Si vous voulez inclure un simple ou un double guet dans votre chaîne, mettez votre chaîne autour du autre type de guet, ou utilisez un guet escape.
local string1 = "Hello world!"print(string1) --> monde!local string2 = 'Hello "world"!'print(string2) --> Hello "world"!
Pour inclure les majuscules et les tirets dans une chaîne, ou pour créer des chaînes multilignes, déclarez-les en utilisant des guillemets doubles :
local string1 = [[Helloworld!Hello "world"!Hello 'world'!]]print(string1)--> Bonjour--> monde !--> Bonjour "monde"!--> Hello 'world'!
Si nécessaire, vous pouvez imbriquer plusieurs brackets dans une chaîne en utilisant le même nombre de signes égaux dans les brackets de début et de fin :
local string1 = [=[Hello[[world!]]]=]print(string1)--> Bonjour--> [[world!]]
Combiner des chaînes
Pour combiner les chaînes, concaténez-les avec deux points ( .. ). Concatenant les chaînes, vous n'insérez pas d'espace entre elles, vous devrez donc inclure de l'espace (s) à la fin/début d'une chaîne précédente/suivante ou concaténer un espace entre les deux chaînes.
local hello = "Hello"local helloWithSpace = "Hello "local world = "world!"local string1 = hello .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(string1) --> Helloworld !print(string2) --> monde!print(string3) --> Hello world!
Notez que la commande print() prend plusieurs arguments et les combine avec des espaces, afin que vous puissiez utiliser , au lieu de , pour produire des espaces dans les sorties 2>print2>.
local hello = "Hello"local world = "world"local exclamationMark = "!"print(hello .. world .. exclamationMark) --> Helloworld !print(hello, world .. exclamationMark) --> monde!print(hello, world, exclamationMark) --> Hello world !
Conversion des chaînes
Pour convertir une chaîne en un nombre, utilisez la fonction tonumber(). Si la chaîne n'a pas de représentation de numéro, tonumber() renvoie nil.
local numericString = "123"print(tonumber(numericString)) --> 123local alphanumericString = "Hello123"print(tonumber(alphanumericString)) --> nil
Échappement des chaînes
Pour échapper à une déclaration de chaîne double ou simple et emporter presque n'importe quel personnage, mettez un slash arrière ( \ ) avant le personnage. Par exemple :
- Pour insérer une seule citation dans une chaîne de citations, utilisez \' .
- Pour insérer une double citation dans une chaîne de double citation, utilisez \".
local string1 = 'Hello \'world\'!'print(string1) --> Bonjour, monde !local string2 = "Hello \"world\"!"print(string2) --> Hello "world"!
Certains personnages suivant les tirets arrière produisent des personnages spéciaux plutôt que des personnages échappés :
- Pour insérer une nouvelle ligne, utilisez \n .
- Pour insérer une balise horizontale, utilisez \t .
local string1 = "Hello\nworld!"print(string1)--> Bonjour--> monde !local string2 = "Hello\tworld!"print(string2) --> Hello world!
Interprétation de la chaîne
Luau prend en charge l'interprétation des chaînes , une fonctionnalité qui vous permet d'insérer des expressions dans les chaînes. Utilisez les tirets arrière ( ` ) pour déclarer une chaîne interpolée, puis ajouter des expressions à l'intérieur des parenthèses :
local world = "world"local string1 = `Hello {world}!`print(string1) --> Hello world!
Bien que les variables soient l'utilisation la plus courante, vous pouvez utiliser n'importe quelle expression, y compris la mathématique :
local world = "world"local number = 1local letters = {"w", "o", "r", "l", "d"}local string1 = `Hello {world}, {number} time!`local string2 = `Hello {world}, {number + 1} times!`local string3 = `Hello {table.concat(letters)} a third time!`print(string1) --> Bonjour, monde, 1 fois !print(string2) --> Bonjour, monde, 2 fois !print(string3) --> Hello world a third time!
Les règles d'évasion standard s'appliquent aux backticks, aux brackets courbés et aux backslashes :
local string1 = `Hello \`\{world\}\`!`print(string1) --> Hello `{world}`!
Conversion de mathématiques
Si vous effectuez des opérations de mathématiques sur une chaîne, Luau convertit automatiquement la chaîne en un nombre. Si la chaîne n'a pas de représentation de numéro, il lance une erreur.
print("55" + 10) --> 65print("55" - 10) --> 45print("55" * 10) --> 550print("55" / 10) --> 5.5print("55" % 10) --> 5print("Hello" + 10) --> print("Hello" + 10):1: attempt to perform arithmetic (add) on string and number
Comparaisons
Les tableaux peuvent être comparés en utilisant les opérateurs <, <=, >, 2><2>, 5><5>,
print("Apple" < "apple") --> vraiprint("Banana" < "apple") --> vrai (B est avant un dans ASCII)print("number100" < "number20") --> true
Référence de modèle de chaîne
Un schéma de caractères est une combinaison de caractères que vous pouvez utiliser avec string.match(), string.gmatch() et d'autres fonctions pour trouver une partie, ou une substring, d'une plus longue chaîne.
Matchs directs
Vous pouvez utiliser des correspondances directes dans une fonction Luau comme string.match() , sauf pour les personnages magiques . Par exemple, ces commandes recherchent le mot Roblox dans une chaîne :
local match1 = string.match("Welcome to Roblox!", "Roblox")local match2 = string.match("Welcome to my awesome game!", "Roblox")print(match1) --> Robloxprint(match2) --> nil
Classes de personnage
Les classes de personnage sont essentielles pour des recherches de chaîne plus avancées. Vous pouvez les utiliser pour rechercher quelque chose qui n'est pas nécessairement spécifique au personnage, mais qui convient dans une catégorie (classe) connue. Vous pouvez les utiliser pour rechercher quelque chose qui n'est pas nécessairement spécifique au personnage, mais qui convient dans une catégorie (classe) connue. Vous pouvez les utiliser pour rechercher quelque chose qui n'est pas nécessairement spécifique au personnage, mais qui convient dans une caté
Le tableau suivant montre les classes de personnages officielles pour les motifs de chaîne Luau :
Classe | représente | Exemple de correspondance |
---|---|---|
. | N'importe quel personnage | 32kasGJ1%fTlk?@94 |
%a | Une lettre majuscule ou minuscule | aBcDeFgHiJkLmNoPqRsTuVwXyZ |
%l | Une lettre minuscule | abcdefghijklmnopqrstuvwxyz |
%u | Une lettre majuscule | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d | N'importe quel chiffre (number) | 0123456789. |
%p | Tout caractère de ponctuation | !@#;.,. |
%w | Un personnage alphanumérique (lettre ou un nombre) | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 |
%s | Un espace ou un caractère blanc | , \n , et \r |
%c | Un personnage de contrôle spécial contrôle du personnage | |
%x) | Un caractère hexadécimal | 0123456789ABCDEF |
%z | Le caractère NULL ( \0 ) |
Pour les classes de personnages à une seule lettre, telles que %a et %s, la lettre supérieure correspondante représente le « opposé » de la classe. Par instance, %p représente un caractère de ponctuation, tandis que 1> %P1> représente tous les caractères sauf ponctuation.
Personnages magiques
Il y a 12 « caractères magiques » qui sont réservés à des fins spéciales dans les modèles :
$ | % | ^ | *) | () | ) |
. | [) | ] | + | - | ? |
Vous pouvez échapper et rechercher des personnages magiques en utilisant le symbole %. Par exemple, pour rechercher roblox.com , éscapez le symbole . (points) en le précédant d'un 1> %1> comme dans 4> % 4> .
-- « roblox.com » correspond à « roblox#com » parce que la période est interprétée comme « n'importe quel personnage »local match1 = string.match("What is roblox#com?", "roblox.com")print(match1) --> roblox#com-- Échappez-vous de la période avec % afin qu'elle soit interprétée comme un personnage de période littérallocal match2 = string.match("I love roblox.com!", "roblox%.com")print(match2) --> roblox.com
Ancres
Vous pouvez rechercher un modèle au début ou à la fin d'une chaîne en utilisant les symboles ^ et $.
local start1 = string.match("first second third", "^first") -- correspond parce que « premier » est au débutprint(start1) --> d'abordlocal start2 = string.match("third second first", "^first") -- Ne correspond pas parce que « premier » n'est pas au débutprint(start2) --> rienlocal end1 = string.match("first second third", "third$") -- correspond parce que « troisième » est à la terminerprint(end1) --> troisièmelocal end2 = string.match("third second first", "third$") -- Ne correspond pas parce que « troisième » n'est pas à la terminerprint(end2) --> nil
Vous pouvez également utiliser les deux ^ et $ ensemble pour vous assurer qu'un modèle correspond à tout le script et non à une partie seulement.
-- Utiliser à la fois ^ et $ pour correspondre à une chaîne complètelocal match1 = string.match("Roblox", "^Roblox$") -- correspond parce que « Roblox » est la chaîne entière (l'égalité)print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- Ne correspond pas parce que « Roblox » n'est pas au début et à la terminerprint(match2) --> rienlocal match3 = string.match("I play Roblox", "Roblox") -- correspond parce que « Roblox » est contenu dans « Je joue Roblox »print(match3) --> Roblox
Modificateurs de classe
En soi, une classe de personnage ne correspond qu'à un seul personnage dans une chaîne. Par instance, le modèle suivant ( "%d" ) commence à lire la chaîne à partir de gauche à droite, trouve le "%d" numéro de digit ( 2 ) et s'arrête.
local match = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match) --> 2
Vous pouvez utiliser modificateurs avec n'importe quelle classe de personnage pour contrôler le resultats:
Quantificateur | Signification |
---|---|
+ | Recherchez 1 ou plus de la classe de personnage précédente |
- | correspondre le plus possible à la classe de caractère précédente |
*) | Rechercher 0 ou plus de la classe de personnage précédente |
? | Coïncidez 1 ou moins de la classe de personnage précédente |
%n | Pour n entre 1 et 9, correspond à une substring égale à la chaîne capturée 1>n1>. |
%bxy) | La capture équilibrée correspondant à x, y, et tout entre (par exemple, %b() correspond à un ensemble de parenthèses et tout entre eux) |
Ajouter un modificateur au même modèle ( "%d+" au lieu de "%d"), produit 25 au lieu de 1> " 2"1> :
local match1 = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match1) --> 2local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")print(match2) --> 25
Sets de classe
Les ensembles doivent être utilisés lorsqu'une seule classe de personnage ne peut pas faire tout le travail. Par instance, vous voudrez peut-être correspondre à la fois aux lettres minuscules ( %l ) et aux caractères de ponctuation ( %p ) en utilisant un modèle unique.
Les ensembles sont définis par des brackets [] autour d'eux. Dans l'exemple suivant, remarquez la différence entre l'utilisation d'un ensemble ( "[%l%p]+" ) et l'utilisation d'un ensemble ( "%l%p" ) ne l'utilisant pas.
local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Ensembleprint(match1) --> bonjourlocal match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Non définiprint(match2) --> o!!!
La première commande (configurer) dit à Luau de trouver les caractères minuscules et les ponctuations. Avec le quantificateur + ajouté après l'ensemble de la configurer, il trouve tous ces caractères ( ello!!!), ce qui s'arrête lorsqu'il atteint l'espace.
Dans la deuxième commande (non définie), le + quantificateur ne s'applique qu'à la classe %p avant elle, donc Luau ne saisit que le premier caractère de majuscule ( o ) avant la série de ponctuation ( 2>!!!2> ).
Comme les Classesde personnages, les tableaux peuvent être des "opposés" de leur propre. Cela est fait en ajoutant un personnage ^ au début du configurer, directement après l'ouverture [. Par instance, "[%p%s]+" représente à la fois la ponctuation et les espaces, tandis que
Les ensembles supportent également portées qui vous permettent de trouver une gamme entière de matchs entre un personnage de départ et un personnage de fin. Ceci est une fonctionnalité avancée qui est décrite plus en détail dans le Manuel Lua 5.1.
Captures de chaîne
Les captures de String sont des sous-modèles dans un modèle. Ces derniers sont encerclés dans des parenthèses () et sont utilisés pour obtenir des sous-chaînes correspondantes et les capturerdans des variables. Par exemple, le modèle suivant contient deux captures, (%a+) et 1> percentd+1>, qui retournent deux sous-chaînes lors d'un correspondreréussi.
local pattern = "(%a+)%s?=%s?(%d+)"local key1, val1 = string.match("TwentyOne = 21", pattern)print(key1, val1) --> TwentyOne 21local key2, val2 = string.match("TwoThousand= 2000", pattern)print(key2, val2) --> Deux mille 2000local key3, val3 = string.match("OneMillion=1000000", pattern)print(key3, val3) --> OneMillion 1000000
Dans le modèle précédent, le ? quantificateur qui suit les deux classes %s est une ajouture sûre parce qu'il rend l'espace sur l'un des deux côtés du = signe optionnel. Cela signifie que le match réussit si un (ou deux) espaces sont manquants autour du signe égal.
Les captures de chaîne peuvent également être imbriquées comme le montrent l'exemple suivant :
local places = "The Cloud Kingdom is heavenly, The Forest Kingdom is peaceful"local pattern = "(The%s(%a+%sKingdom)[%w%s]+)"for description, kingdom in string.gmatch(places, pattern) doprint(description)print(kingdom)end--> Le Cloud Kingdom est céleste--> Royaume des nuages--> Le royaume de la forêt est paisible--> Forest Kingdom
Cette recherche de motif fonctionne comme suivant :
Le string.gmatch() itérateur cherche un match sur tout le modèle de description défini par la paire extérieure de parentheses. Cela s'arrête au premier comma et capture ce qui suivre:
# | Motif | Capturer |
---|---|---|
1 | (Le%s:%a+%sKingdom][%w%s+) | Le Cloud Kingdom est céleste |
En utilisant sa première capturerréussie, l'iterateur recherche ensuite un match sur le modèle « royaume » défini par la paire intérieure de parenthèses. Ce modèle imbriqué capture simplement les éléments suivre:
# | Motif | Capturer |
---|---|---|
2) | %a+%sRoyaume) | Royaume des nuages |
L'iterator se met alors en arrière et continue de rechercher la chaîne complète, en capturant les éléments suivre:
# | Motif | Capturer |
---|---|---|
3 | (Le%s:%a+%sKingdom][%w%s+) | Le royaume de la forêt est paisible |
4 | %a+%sRoyaume) | Royaume de la forêt |
En plus de tout ce qui précède, il y a un cas spécial avec une capture vide ( () ). Si une capture est vide, la position dans la chaîne sera capturée :
local match1 = "Where does the capture happen? Who knows!"local match2 = "This string is longer than the first one. Where does the capture happen? Who knows?!"local pattern = "()Where does the capture happen%? Who knows!()"local start1, finish1 = string.match(match1, pattern)print(start1, finish1) --> 1 42local start2, finish2 = string.match(match2, pattern)print(start2, finish2) --> 43 84
Ces captures spéciales peuvent être imbriquées comme les autres :
local places = "The Cloud Kingdom is heavenly, The Forest Kingdom is peaceful."local pattern = "The (%a+()) Kingdom is %a+"for kingdom, position in string.gmatch(places, pattern) doprint(kingdom, position)end--> Cloud 10--> Forest 42
Les valeurs renvoyées sont insolites dans le sens où elles sont des nombres plutôt que des chaînes :
local match = "This is an example"local pattern = "This is an ()example"local position = string.match(match, pattern)print(typeof(position)) --> number