Lignes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

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 = [[Hello
world!
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 .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(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)) --> 123
local 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 = 1
local 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) --> 65
print("55" - 10) --> 45
print("55" * 10) --> 550
print("55" / 10) --> 5.5
print("55" % 10) --> 5
print("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") --> vrai
print("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) --> Roblox
print(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 :

ClassereprésenteExemple de correspondance
.N'importe quel personnage32kasGJ1%fTlk?@94
%aUne lettre majuscule ou minusculeaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lUne lettre minusculeabcdefghijklmnopqrstuvwxyz
%uUne lettre majusculeABCDEFGHIJKLMNOPQRSTUVWXYZ
%dN'importe quel chiffre (number)0123456789.
%pTout caractère de ponctuation!@#;.,.
%wUn personnage alphanumérique (lettre ou un nombre)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sUn espace ou un caractère blanc , \n , et \r
%cUn personnage de contrôle spécial contrôle du personnage
%x)Un caractère hexadécimal0123456789ABCDEF
%zLe 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éral
local 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ébut
print(start1) --> d'abord
local start2 = string.match("third second first", "^first") -- Ne correspond pas parce que « premier » n'est pas au début
print(start2) --> rien
local end1 = string.match("first second third", "third$") -- correspond parce que « troisième » est à la terminer
print(end1) --> troisième
local end2 = string.match("third second first", "third$") -- Ne correspond pas parce que « troisième » n'est pas à la terminer
print(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ète
local match1 = string.match("Roblox", "^Roblox$") -- correspond parce que « Roblox » est la chaîne entière (l'égalité)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Ne correspond pas parce que « Roblox » n'est pas au début et à la terminer
print(match2) --> rien
local 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:

QuantificateurSignification
+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
%nPour 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) --> 2
local 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]+") -- Ensemble
print(match1) --> bonjour
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Non défini
print(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 21
local key2, val2 = string.match("TwoThousand= 2000", pattern)
print(key2, val2) --> Deux mille 2000
local 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) do
print(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:

#MotifCapturer
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:

#MotifCapturer
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:

#MotifCapturer
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 42
local 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) do
print(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