chaînes

*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 chaîne est une séquence de caractères, tels que des lettres, des chiffres et des symboles.C'est le type de données pour stocker la plupart des informations basées sur du texte.

Déclarer des chaînes

Pour déclarer une variable de chaîne, mettez des guillemets autour des caractères.Il est plus courant d'utiliser des guillemets doubles ( " ), mais les guillemets simples ( ' ) fonctionnent également.Si vous voulez inclure une citation simple ou double dans votre chaîne, enveloppez votre chaîne autour de l'autre type de citation, ou utilisez une citation échappée.


local string1 = "Hello world!"
print(string1) --> Bonjour monde !
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Pour inclure des quotes uniques et doubles dans une chaîne, ou pour créer des chaînes à plusieurs lignes, déclarez-les en utilisant des parenthèses doubles :


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Bonjour
--> monde !
--> Bonjour « monde » !
--> Hello 'world'!

Si nécessaire, vous pouvez imbriquer plusieurs parenthèses dans une chaîne en utilisant le même nombre d'égales signes à la fois dans le début et la fin de la parenthèse :


local string1 = [=[Hello
[[world!]]
]=]
print(string1)
--> Bonjour
--> [[world!]]

Combiner les chaînes

Pour combiner des chaînes, concaténer les avec deux points ( .. ).La concaténation des chaînes n'insère pas d'espace entre elles, vous devrez donc inclure de l'espace (s) à la fin/au 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) --> Monde Helloworld !
print(string2) --> Bonjour monde !
print(string3) --> Hello world!

Notez que la commande print() prend plusieurs arguments et les combine avec des espaces, afin que vous puissiez utiliser , à la place de .. pour produire des espaces dans les sorties print().


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Monde Helloworld !
print(hello, world .. exclamationMark) --> Bonjour monde !
print(hello, world, exclamationMark) --> Hello world !

Convertir des chaînes

Pour convertir une chaîne en nombre, utilisez la fonction tonumber(). Si la chaîne n'a pas de représentation numérique, tonumber() renvoie nil.


local numericString = "123"
print(tonumber(numericString)) --> 123
local alphanumericString = "Hello123"
print(tonumber(alphanumericString)) --> nil

Échappez les chaînes

Pour échapper à une déclaration de chaîne double ou simple et inclure presque n'importe quel caractère, mettez un retour arrière ( \ ) devant le caractère.Par exemple :

  • Pour insérer une seule citation dans une chaîne de citation unique, utilisez \' .
  • Pour insérer une citation double dans une chaîne de citation double, utilisez \" .

local string1 = 'Hello \'world\'!'
print(string1) --> Bonjour 'monde' !
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

Certains caractères suivant des retours arrière produisent des caractères spéciaux plutôt que des caractères échappés :

  • Pour insérer une nouvelle ligne, utilisez \n .
  • Pour insérer une tab horizontale, utilisez \t .

local string1 = "Hello\nworld!"
print(string1)
--> Bonjour
--> monde !
local string2 = "Hello\tworld!"
print(string2) --> Hello world!

interpolationde chaîne

Luau prend en charge l'interpolation de chaînes , une fonctionnalité qui vous permet d'insérer des expressions dans des chaînes.Utilisez des tirets arrière ( ` ) pour déclarer une chaîne interpolée, puis ajoutez des expressions à l'intérieur de parenthèses courbes :


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 tirets, aux parenthèses courbes et aux retours arrière :


local string1 = `Hello \`\{world\}\`!`
print(string1) --> Hello `{world}`!

Conversion mathématique

Si vous effectuez des opérations 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 numérique, elle 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 chaînes peuvent être comparées en utilisant les opérateurs <, <=, > et >= qui comparent en ordre lexical en fonction des codes ASCII de chaque caractère dans une chaîne.Cela entraînera des nombres dans les chaînes ne pas être comparés correctement, par exemple, "100" sera inférieur à "20" , puisque les octets "0" et "1" ont des codes ASCII inférieurs à l'octet "2" .


print("Apple" < "apple") --> vrai
print("Banana" < "apple") --> true (B est avant un dans ASCII)
print("number100" < "number20") --> true

Référence au modèle de chaîne

Un modèle de chaîne est une combinaison de caractères que vous pouvez utiliser avec , et d'autres fonctions pour trouver un morceau, ou une sous-chaîne, d'une chaîne plus longue.

Correspondances directes

Vous pouvez utiliser des correspondances directes dans une fonction Luau comme string.match() , sauf pour les caractères 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 caractères

Les classes de caractères sont essentielles pour les recherches de chaînes plus avancées.Vous pouvez les utiliser pour rechercher quelque chose qui n'est pas nécessairement spécifique au caractère mais qui s'inscrit dans une catégorie connue (classe), y compris lettres , chiffres , espaces , ponctuation et plus encore.

Le tableau suivant montre les classes de caractères officielles pour les modèles de chaîne Luau :

ClasseReprésenteExemple de correspondance
.Tout caractère32kasGJ1%fTlk ?@94
%aUne lettre majuscule ou minusculeabcdefghijklmnopqrsztuvwxyz
%lUne lettre minusculeabcdefghijklmnopqrstuvwxyz
%uUne lettre majusculeABCDEFGHIJKLMNOPQRSTUVWXYZ
%dN'importe quel chiffre (number)0123456789
%pTout caractère de ponctuation!@#;,.
%wUn caractère alphanumérique (lettre ou un nombre)abcdefghijklmnopqrsztuvwxyz0123456789
%sUn espace ou un caractère blanc , \n , et \r
%cUn caractère de contrôle spécial
%xUn caractère hexadécimal0123456789 ABCDEF
%z >Le caractère NULL (\0 )

Pour les classes de caractère à une lettre telles que %a et %s, la lettre majuscule correspondante représente l'« opposé » de la classe.Par instance, %p représente un caractère de ponctuation alors que %P représente tous les caractères sauf le ponctuel.

Personnages magiques

Il y a 12 «personnages magiques» qui sont réservés à des fins spéciales dans les modèles :

$%^*()
.[]+-?

Vous pouvez vous échapper et rechercher des caractères magiques en utilisant le symbole %.Par exemple, pour rechercher roblox.com , échappez le symbole . (point) en le précédant d'un % comme dans %. .


-- les correspondances "roblox.com" à "roblox#com" sont interprétées comme "n'importe quel caractère"
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 caractère de période littéral
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Ancrages

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) --> zéro
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 à la fois ^ et $ ensemble pour vous assurer qu'un modèle correspond uniquement à l'ensemble de la chaîne et non à une partie seulement.


-- Utiliser à la fois ^ et $ pour correspondre à travers une chaîne complète
local match1 = string.match("Roblox", "^Roblox$") -- Correspond parce que "Roblox" est l'ensemble de la chaîne (é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) --> zéro
local match3 = string.match("I play Roblox", "Roblox") -- Correspond parce que "Roblox" est contenu dans "J'ai joué à Roblox"
print(match3) --> Roblox

Modifieurs de classe

Par lui-même, une classe de caractère ne correspond qu'à un caractère dans une chaîne.Par instance, le modèle suivant ( ) commence à lire la chaîne de gauche à droite, trouve le premier nombre ( ), 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 caractère pour contrôler le resultats:

QuantificateurSignification
+Correspondre à 1 ou plus de la classe de caractère précédente
-Correspondre à le moins possible de la classe de caractère précédente
*Correspondre à 0 ou plus de la classe de caractère précédente
?Correspondre à 1 ou moins de la classe de caractère précédente
%nPour n entre 1 et 9, correspond à une sous-chaîne égale à la chaîne capturée n.
%bxyLa capture équilibrée correspondant à x, y, et tout ce qui se trouve entre (par exemple, %b() correspond à une paire de parenthèses et tout ce qui se trouve entre elles)

Ajouter un modifieur au même motif ( "%d+" au lieu de "%d" ), produit 25 au lieu de 2 :


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

Ensembles de classes

Les ensembles doivent être utilisés lorsqu'une seule classe de caractère ne peut pas faire tout le travail.Par instance, vous pouvez vouloir correspondre à la fois aux lettres minuscules ( ) et aux caractères de ponctuation ( ) en utilisant un seul modèle.

Les ensembles sont définis par des parenthèses [] autour d'eux.Dans l'exemple suivant, remarquez la différence entre l'utilisation d'un ensemble ( "[%l%p]+" ) et pas l'utilisation d'un ensemble ( "%l%p+" ).


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Définir
print(match1) --> ello!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Non défini
print(match2) --> o!!!

La première commande (configurer) indique à Luau de trouver à la fois les caractères minuscules et la ponctuation.Avec le quantificateur + ajouté après l'ensemble configurer, il trouve tous ces caractères ( ello!!! ), s'arrêtant lorsqu'il atteint l'espace.

Dans la deuxième commande (non définie), le quantificateur + ne s'applique qu'à la classe %p précédente, donc Luau ne saisit que le premier caractère minuscule ( o ) avant la série de ponctuation ( !!! ).

Comme les Classesde caractères, les ensembles peuvent être des « opposés » d'eux-mêmes.Cela se fait en ajoutant un caractère ^ 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 "[^%p%s]+" représente tous les caractères sauf la ponctuation et les espaces.

Les ensembles supportent également les portées qui vous permettent de trouver une gamme entière de correspondances entre un caractère de départ et un caractère de fin.Il s'agit d'une fonctionnalité avancée qui est détaillée en plus de détail dans le Manuel Lua 5.1.

Captures de chaîne

Les captures de chaîne sont des sous-modèles dans un modèle .Ceux-ci sont encerclés dans des parenthèses () et sont utilisés pour obtenir (capturer) des sous-chaînes correspondantes et les enregistrer dans des variables.Par exemple, le modèle suivant contient deux captures, (%a+) et (%d+) , 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 addition sûre car il rend l'espace à côté du signe = facultatif.Cela signifie que le match réussit si un (ou les deux) espaces manquent autour du signe égal.

Les captures de chaîne peuvent également être imbriquées comme 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 royaume du cloud est paradisiaque
--> Royaume du cloud
--> Le royaume de la forêt est pacifique
--> Forest Kingdom

Cette recherche de modèle fonctionne comme suit :

L'iterator string.gmatch() recherche une correspondance sur l'ensemble du modèle « description » défini par la paire extérieure de parenthèses.Cela s'arrête au premier virgule et capture ce qui suivre:

#MotifCapture
1(Le%s (%a+%sRoyaume)[%w%s]+)Le royaume du cloud est paradisiaque

En utilisant sa première capturerréussie, l'iterator recherche ensuite une correspondance sur le modèle « royaume » défini par la paire intérieure de parenthèses.Ce motif hérité capture simplement ce qui suivre:

#MotifCapture
2(%a+%sRoyaume)Royaume du cloud

L'iterator se retire ensuite et poursuit la recherche de la chaîne complète, en capturant ce qui suivre:

#MotifCapture
3(Le%s (%a+%sRoyaume)[%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 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 des captures normales :


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 inhabituelles en ce qu'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