English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A string or string (String) is a series of characters consisting of numbers, letters, and underscores.
In Lua, strings can be represented in the following three ways:
A series of characters between single quotes.
A series of characters between double quotes.
[[ and ]] A series of characters between
The following are examples of the three ways of string representation:
string1 = "Lua" print("\"String 1 is\"", string1) string2 = 'oldtoolbag.com' print("String 2 is", string2) string3 = [["Lua Tutorial"]] print("String 3 is", string3)
The output result of the above code is:
"String 1 is" Lua String 2 is oldtoolbag.com String 3 is "Lua Tutorial"
Escape characters are used to represent characters that cannot be displayed directly, such as the backspace key, the enter key, etc. For example, double quotes in a string can be represented as "\"".
All escape characters and their meanings:
Escape character | Meaning | ASCII code value (decimal) |
\a | Bell (BEL) | 007 |
\b | Backspace (BS), moves the current position to the previous column | 008 |
\f | Form Feed (FF), moves the current position to the beginning of the next page | 012 |
\n | Line Feed (LF), moves the current position to the beginning of the next line | 010 |
\r | Carriage Return (CR), moves the current position to the beginning of the line | 013 |
\t | Horizontal Tab (HT) (Jump to the next TAB position) | 009 |
\v | Vertical Tab (VT) | 011 |
\\ | Rappresenta un carattere di backslash | 092 |
\' | Rappresenta un carattere di virgoletta singola (apostrofo) | 039 |
\" | Rappresenta un carattere di virgoletta doppietta | 034 |
\0 | Carattere nullo (NULL) | 000 |
\ddd | Caratteri rappresentati da 1 a 3 cifre ottali | Ottale a tre cifre |
\xhh | Caratteri rappresentati da 1 a 2 cifre esadecimali | Hexadecimali a due cifre |
Lua fornisce molti metodi per supportare le operazioni di stringa:
Numero di serie | Metodo & Utilizzo |
---|---|
1 | string.upper(argument): Converti tutta la stringa in lettere maiuscole. |
2 | string.lower(argument): Converti tutta la stringa in lettere minuscole. |
3 | string.gsub(mainString,findString,replaceString,num) Sostituzione nella stringa. mainString è la stringa da modificare, findString è il carattere da sostituire, replaceString è il carattere da sostituire, num è il numero di sostituzioni (può essere ignorato, sostituisce tutto), ad esempio:> string.gsub("aaaa","a","z",3); zzza 3 |
4 | string.find (str, substr, [init, [end]]) Cerca il contenuto specificato in una stringa obiettivo (il terzo parametro è l'indice), restituisce la posizione specifica. Se non esiste, restituisce nil. > string.find("Hello Lua user", "Lua", 1) 7 9 |
5 | string.reverse(arg) Inversione di stringa > string.reverse("Lua") auL |
6 | string.format(...) Restituisce una stringa formattata simile a printf > string.format("il valore è:%d",4) il valore è:4 |
7 | string.char(arg) e string.byte(arg[,int]) char trasforma un numero intero in un carattere e lo concatena, byte converte un carattere in un valore intero (può specificare un carattere, di default il primo carattere). > string.char(97,98,99,100) abcd > string.byte("ABCD",4) 68 > string.byte("ABCD") 65 > |
8 | string.len(arg) Calcola la lunghezza della stringa. string.len("abc") 3 |
9 | string.rep(string, n) Restituisce n copie della stringa string. > string.rep("abcd",2) abcdabcd |
10 | .. Concatena due stringhe > print("www.w3codebox.".."com") it.oldtoolbag.com |
11 | string.gmatch(str, pattern) Restituisce una funzione iterativa, ogni volta che viene chiamata, restituisce la prossima sottostringa che corrisponde a pattern trovata nella stringa str. Se la stringa non contiene una stringa che corrisponde a pattern, la funzione iterativa restituisce nil. > for word in string.gmatch("Hello Lua user", "%a+") do print(word) end Hello Lua user |
12 | string.match(str, pattern, init) string.match() cerca solo la prima corrispondenza nella stringa di origine str. Il parametro init è opzionale e specifica il punto di partenza della ricerca, predefinito a 1. Quando ci sono corrispondenze di successo, la funzione restituisce tutti i risultati delle espressioni di cattura; se non sono stati impostati i marcatori di cattura, viene restituita l'intera stringa di corrispondenza. Se non ci sono corrispondenze di successo, viene restituito nil. > = string.match("I have 2 questions for you.", "%d+ %a+") 2 questions > = string.format("%d, %q", string.match("I have 2 questions for you.", "(%d+) (%a+)")) 2, "questions" |
Estrazione di stringhe utilizzando il metodo sub()
string.sub() è usato per estrarre stringhe, la sua firma è:
string.sub(s, i[, j])
Spiegazione dei parametri:
s: stringa da estrarre.
i: posizione di fine della sezione da estrarre.
j: posizione di inizio della sezione da estrarre, predefinita a -1, l'ultimo carattere.
-- Stringa local sourcestr = "prefix--w3codeboxgoogletaobao--suffix" print("\nStringa originale", string.format("%q", sourcestr)) -- Estrazione parziale, dal primo al quindicesimo local first_sub = string.sub(sourcestr, 4, 15) print("\nPrima estrazione", string.format("%q", first_sub)) -- Prendere il prefisso della stringa, dal primo al第八个 local second_sub = string.sub(sourcestr, 1, 8) print("\nSeconda estrazione", string.format("%q", second_sub)) -- Estrazione degli ultimi 10 local third_sub = string.sub(sourcestr, -10) print("\nTerza estrazione", string.format("%q", third_sub)) -- Indice fuori dai limiti, output della stringa originale local fourth_sub = string.sub(sourcestr, -100) print("\nQuarta estrazione", string.format("%q", fourth_sub))
Il risultato dell'esecuzione del codice sopra è:
Stringa originale "prefix--w3codeboxgoogletaobao--suffix" Prima estrazione "fix--w3codeboxg" Seconda estrazione "prefix--" Terza estrazione "ao--suffix" Quarta estrazione "prefix--w3codeboxgoogletaobao--suffix"
Esempio seguente dimostra come convertire la maiuscolizzazione delle stringhe:
string1 = "Lua"; print(string.upper(string1)) print(string.lower(string1))
Il risultato dell'esecuzione del codice sopra è:
LUA lua
Esempio seguente dimostra come cercare e invertire una stringa:
string = "Lua Tutorial" -- Ricerca della stringa print(string.find(string,"Tutorial")) reversedString = string.reverse(string) print("La nuova stringa è",reversedString)
Il risultato dell'esecuzione del codice sopra è:
5 12 La nuova stringa è lairotuT auL
Lua provides the string.format() function to generate strings with a specific format, where the first parameter is the format, followed by various data corresponding to each code in the format.
Due to the presence of the format string, the readability of the generated long string is greatly improved. The format of this function is very similar to that of the C language printf().
The following examples demonstrate how to perform string formatting operations:
The format string may contain the following escape codes:
%c - Accepts a number and converts it into the corresponding character in the ASCII code table
%d, %i - Accepts a number and converts it into signed integer format
%o - Accepts a number and converts it into octal number format
蒚ccepts a number and converts it into unsigned integer format
%x - Accepts a number and converts it into hexadecimal number format, using lowercase letters
%X - Accepts a number and converts it into hexadecimal number format, using uppercase letters
%e - Accepts a number and converts it into scientific notation format, using lowercase letter e
%E - Accepts a number and converts it into scientific notation format, using uppercase letter E
%f - Accepts a number and converts it into floating-point number format
%g(%G) - Accepts a number and converts it into the shorter format of %e(%E, corresponding to %G) and %f
%q - Accepts a string and converts it into a format that can be safely read by the Lua compiler
%s - Accepts a string and formats it according to the given parameters
To further refine the format, parameters can be added after the % sign. The parameters will be read in the following order:
(1) Symbol: A plus sign indicates that the number escape character after it will display the positive sign for positive numbers. By default, only negative numbers display the sign.
(2) Placeholder: A zero, used as a placeholder when the string width is specified. The default placeholder when not specified is a space.
(3) Alignment identifier: When the string width is specified, the default is right-aligned; adding a minus sign can be changed to left-aligned.
(4) Width value
(5) Decimal places/substring cutting: The decimal part n added after the width value, if followed by f(float escape character, such as %6.3f), then the decimal part of the floating-point number is set to retain only n places; if followed by s(string escape character, such as %5.3s), then the string is set to display only the first n characters.
string1 = "Lua" string2 = "Tutorial" number1 = 10 number2 = 20 -- Base string formatting print(string.format("Basic formatting \t%s \t%s", string1, string2)) -- Formattazione della data date = 2; month = 1; year = 2014 print(string.format("Formattazione della data %02d/%02d/%03d", date, month, year)) -- Decimal format print(string.format("%.4f", 1/3))
Il risultato dell'esecuzione del codice sopra è:
Formattazione di base Lua Tutorial Formattazione della data 02/01/2014 0.3333
Altri esempi:
string.format("%c", 83) -- OutputS string.format("%+d", 17.0) -- Output+17 string.format("%05d", 17) -- Output00017 string.format("%o", 17) -- Output21 string.format("眻, 3.14) -- Output3 string.format("%x", 13) -- Outputd string.format("%X", 13) -- OutputD string.format("%e", 1000) -- Output1.000000e+03 string.format("%E", 1000) -- Output1.000000E+03 string.format("%6.3f", 13) -- Output13.000 string.format("%q", "One\nTwo") -- Output"One\ -- Two" string.format("%s", "monkey") -- Outputmonkey string.format("%10s", "monkey") -- Output monkey string.format("%5.3s", "monkey") -- Output mon
Esempio di conversione tra caratteri e interi:
-- 字符转换 -- Conversione del primo carattere print(string.byte("Lua")) -- Conversione del terzo carattere print(string.byte("Lua", 3)) -- Conversione del primo carattere alla fine print(string.byte("Lua", -1)) -- Secondo carattere print(string.byte("Lua", 2)) -- Conversione del secondo carattere alla fine print(string.byte("Lua", -2)) -- Conversione del codice ASCII intero in carattere print(string.char(97))
Il risultato dell'esecuzione del codice sopra è:
76 97 97 117 117 a
Di seguito è riportato un esempio che dimostra altre operazioni sugli stringhe, come calcolare la lunghezza della stringa, concatenare stringhe, copiare stringhe, ecc.:
string1 = "www." string2 = "w3codebox" string3 = ".com" -- Utilizzo di .. per concatenare stringhe print("Concatenazione di stringhe ", string1..string2..string3) -- Lunghezza della stringa print("Lunghezza della stringa ", string.len(string2)) -- Copia della stringa 2 volte repeatedString = string.rep(string2, 2) print(repeatedString)
Il risultato dell'esecuzione del codice sopra è:
Concatenazione di stringhe it.oldtoolbag.com Lunghezza della stringa 5 w3codeboxw3codebox
I modelli di corrispondenza in Lua sono descritti direttamente con stringhe normali. Sono usati dalle funzioni di corrispondenza di modello string.find, string.gmatch, string.gsub, string.match.
Puoi anche usare i tipi di carattere nella stringa di modello.
Un tipo di carattere è un oggetto che può corrispondere a qualsiasi carattere all'interno di un insieme di caratteri specifici. Ad esempio, il tipo di carattere %d Corrisponde a qualsiasi numero. Quindi puoi usare la stringa di modello %d%d/%d%d/%d%d%d%d per cercare dd/mm/yyyy Formato della data:
s = "Deadline is 30/05/1999, firm" date = "%d%d/%d%d/%d%d%d%d" print(string.sub(s, string.find(s, date))) --> 30/05/1999
La seguente tabella elenca tutti i tipi di caratteri supportati da Lua:
Un singolo carattere (eccetto}} ^$()%.[]*+-? ). Con il carattere stesso.
.(punto): Corrisponde a qualsiasi carattere.
%a: Corrisponde a qualsiasi lettera.
%c: Corrisponde a qualsiasi carattere di controllo (ad esempio \n).
%d: Corrisponde a qualsiasi numero.
%l: Corrisponde a qualsiasi lettera minuscola.
%p: Corrisponde a qualsiasi carattere di punteggiatura.
%s: Corrisponde a qualsiasi carattere bianco.
᧸rrisponde a qualsiasi lettera maiuscola.
%w: Corrisponde a qualsiasi lettera/numero.
%x: Corrisponde a qualsiasi numero esadecimale.
%z: Corrisponde a qualsiasi carattere che rappresenta 0.
%x(qui x è un carattere non letterale o numerico): Corrisponde al carattere x. Mainmente usato per risolvere problemi di combinazione di caratteri funzionali nell'espressione (^$()%.[]*+-?). Ad esempio, %% corrisponde a %.
[characteri di classe]: Corrisponde a qualsiasi carattere incluso in []. Ad esempio, [%w_] corrisponde a qualsiasi lettera/numero o simbolo di sottolineatura (_).
[^characteri di classe]: Corrisponde a qualsiasi carattere non incluso in []. Ad esempio, [^%s] corrisponde a qualsiasi carattere non bianco.
Quando i caratteri di classe sono scritti in maiuscolo, rappresentano una combinazione con qualsiasi carattere non della classe. Ad esempio, %S corrisponde a qualsiasi carattere non bianco. Ad esempio, '%A' corrisponde a qualsiasi carattere non letterale:
> print(string.gsub("hello, up-down!", "%A", ".")) hello..up.down. 4
Il numero 4 non fa parte del risultato della stringa, è il secondo risultato restituito da gsub, che rappresenta il numero di sostituzioni effettuate.
In una corrispondenza di modello ci sono alcuni caratteri speciali che hanno un significato speciale, i caratteri speciali in Lua sono i seguenti:
( ) . % + - * ? [ ^ $
'%' è usato come carattere di escape per i caratteri speciali, quindi '%.' corrisponde al punto; '%%' corrisponde al carattere '%'. Il carattere di escape '%' può essere usato non solo per i caratteri speciali, ma anche per tutti i caratteri non letterali.
Un voce di modello può essere:
Una classe di caratteri corrisponde a qualsiasi singolo carattere della classe;
Una classe di caratteri seguita da un '*', Corrisponderà a zero o più di questa classe di caratteri. Questa voce corrisponde sempre alla stringa più lunga possibile;
Una classe di caratteri seguita da un '+', Corrisponderà a uno o più di questa classe di caratteri. Questa voce corrisponde sempre alla stringa più lunga possibile;
Una classe di caratteri seguita da un '-', Corrisponderà a zero o più di questa classe di caratteri. Diversamente da '*', Questa voce corrisponde sempre alla stringa più corta possibile;
Una classe di caratteri seguita da un '?', Corrisponderà a zero o a uno di questa classe di caratteri. Se possibile, corrisponderà a uno;
%n, Questa n può essere da 1 a 9; Questa voce corrisponde a un valore uguale a n sottostringa del capturo (descritto dopo).
%bxy, Questa x e y Sono due caratteri chiari; Questa voce corrisponde a x e y e e x e y mantenere bilanciato stringa. significa che, leggendo la stringa da sinistra a destra, per ogni lettura di unx è +1 e, leggere un y è -1, e il punto finale y è il primo contatore che arriva a 0 y. Facciamo un esempio, la voce %b() può corrispondere a un'espressione di parentesi bilanciate.
%f[set] Rappresenta 边境模式; Questa voce corrisponderà a una posizione situata set un carattere prima di uno在内的某个字符之前的一个空串, e questa posizione non appartiene a set . insieme set Il significato è come descritto sopra. Il calcolo dell'inizio e della fine della stringa vuota trovata è considerato come se ci fosse un carattere '\0' allo stesso modo.
Modello:
Modello Rappresenta una sequenza di entry di modello. Aggiungendo il simbolo '^' all'inizio del modello, il processo di match viene ancorato dall'inizio della stringa. Aggiungendo il simbolo '$' alla fine del modello, il processo di match viene ancorato alla fine della stringa. Se '^' e '$' appaiono in altre posizioni, non hanno significato speciale, rappresentano solo sé stessi.
Cattura:
Un modello può racchiudere un sottomodello con parentesi quadre all'interno; Questi sottomodelli sono chiamati Catture. Quando il match è riuscito, da Catture Le sottostringhe corrispondenti trovate vengono salvate per uso futuro. Le catture sono numerate in base all'ordine dei loro parentesi aperti. Ad esempio, per il modello "(a*(.)%w(%s*))", La parte della stringa che corrisponde a "a*(.)%w(%s*)" viene salvata nella prima cattura (quindi è la cattura numero 1); Il carattere corrispondente a "." è la cattura numero 2, La parte corrispondente a "%s*" è la cattura numero 3.
Come eccezione, una cattura vuota () catturerà la posizione attuale della stringa (è un numero). Ad esempio, se si applica il modello "()aa()" alla stringa "flaaap", si genereranno due catture: 3 e 5 .