English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Cadenas de Lua

A string or string (String) is a sequence of characters consisting of numbers, letters, and underscores.

In Lua, strings can be represented in the following three ways:

  • A sequence of characters between single quotes.

  • A sequence of characters between double quotes.

  • ]] With ]] A sequence of characters.

The following are examples of the three methods of string representation:

string1 = "Lua"
print("\"String 1 Is1)
string2 = '3codebox.com'
print("String 2 Is2)
string3 = [[
print("String 3 Is3)

The output result of the above code is:

String 1 Is
字符串 2 Is3codebox.com
字符串 3 Is

Escape characters are used to represent characters that cannot be displayed directly, such as the backspace key, enter key, etc. For example, in string conversion, double quotes can be used 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
\\
representa un carácter de barra invertida
092
\'
representa un carácter de comilla simple
039
\"
representa un carácter de comilla doblada
034
\0
carácter nulo (NULL)
000
\ddd
1a3carácter representado por el número octal de tres dígitos
octal de tres dígitos
\xhh
1a2carácter representado por el número hexadecimal de dos dígitos
hexadecimal de dos dígitos

operaciones de cadena de caracteres

Lua proporciona muchos métodos para soportar operaciones de cadenas de caracteres:

númerométodo y propósito
1string.upper(argument):
convertir toda la cadena de caracteres en mayúsculas.
2string.lower(argument):
convertir toda la cadena de caracteres en minúsculas.
3string.gsub(mainString,findString,replaceString,num)

reemplazar en la cadena de caracteres.

mainString es la cadena de caracteres a operar, findString es el carácter a reemplazar, replaceString es el carácter a reemplazar, num veces a reemplazar (puede omitirse, entonces reemplaza todo), por ejemplo:
> string.gsub("aaaa","a","z",3);
zzza    3
4string.find (str, substr, [init, [end]])
busca contenido específico en una cadena de destino específica (el tercer parámetro es el índice), devuelve su posición específica. Si no existe, devuelve nil.
> string.find("Hello Lua user", "Lua", 1) 
7    9
5string.reverse(arg)
invierte la cadena de caracteres
> string.reverse("Lua")
auL
6string.format(...)
devuelve una cadena de caracteres formateada similar a printf
> string.format("el valor es:%d",4)
el valor es:4
7string.char(arg) y string.byte(arg[,int])
char convierte un número entero en un carácter y lo concatena, byte convierte un carácter en un valor entero (puede especificar un carácter, por defecto el primer carácter).
> string.char(97,98,99,100)
abcd
> string.byte("ABCD",4)
68
> string.byte("ABCD")
65
>
8string.len(arg)
calcular la longitud de la cadena de caracteres.
string.len("abc")
3
9string.rep(string, n)
devuelve una copia de la cadena de caracteres string n veces
> string.rep("abcd",2)
abcdabcd
10..
链接两个字符串
> print("www.w3codebox.".."com"
es.oldtoolbag.com
11string.gmatch(str, pattern)
回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。
> for word in string.gmatch("Hello Lua user", "%a+") do print(word) end
Hello
Lua
user
12string.match(str, pattern, init)
string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1.
在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回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"

字符串截取

字符串截取使用 sub() 方法。

string.sub() 用于截取字符串,原型为:

string.sub(s, i[, j])

参数说明:

  • s:要截取的字符串。

  • i:截取开始位置。

  • j:截取结束位置,默认为 -1,最后一个字符。

-- 字符串
local sourcestr = "prefix--w3codeboxgoogletaobao--sufijo"
print("\n原始字符串", string.format("%q", sourcestr))
-- 截取部分,第1个到第15
local first_sub = string.sub(sourcestr, 4, 15)
print("\n第一次截取", string.format("%q", first_sub))
-- 取字符串前缀,第1个到第8
local second_sub = string.sub(sourcestr, 1, 8)
print("\nSegunda extracción", string.format("%q", second_sub))
-- Cortar el último10
local third_sub = string.sub(sourcestr, -10)
print("\nTercera extracción", string.format("%q", third_sub))
-- 
local fourth_sub = string.sub(sourcestr, -100)
print("\nCuarta extracción", string.format("%q", fourth_sub))

El resultado de ejecutar el código anterior es:

Cadena original    "prefijo--w3codeboxgoogletaobao--sufijo"
Primera extracción    "fix--w3codeboxg"
Segunda extracción    "prefijo--"
Tercera extracción    "ao--sufijo"
Cuarta extracción    "prefijo--w3codeboxgoogletaobao--sufijo"

Conversión de mayúsculas y minúsculas de cadena

Los siguientes ejemplos muestran cómo realizar la conversión de mayúsculas y minúsculas de cadenas:

string1 = "Lua";
print(string.upper(string1))
print(string.lower(string1))

El resultado de ejecutar el código anterior es:

LUA
lua

Búsqueda y reversión de cadena

Los siguientes ejemplos muestran cómo realizar operaciones de búsqueda y reversión de cadenas:

string = "Lua Tutorial"
-- Búsqueda de cadena
print(string.find(string,"Tutorial"))
reversedString = string.reverse(string)
print("La nueva cadena es",reversedString)

El resultado de ejecutar el código anterior es:

5    12
La nueva cadena es  lairotuT auL

Formateo de cadena

Lua proporciona la función string.format() para generar cadenas con un formato específico, el primer parámetro es el formato y luego están los datos correspondientes a cada código en el formato.

Gracias a la existencia de la cadena de formato, la legibilidad de las cadenas largas generadas se ha mejorado significativamente. La función tiene un formato similar al de printf() en C.

Los siguientes ejemplos muestran cómo realizar operaciones de formateo de cadenas:

La cadena de formato puede contener los siguientes códigos de escape:

  • %c - Aceptar un número y convertirlo en el carácter correspondiente en la tabla de códigos ASCII

  • %d, %i - Aceptar un número y convertirlo en formato de entero con signo

  • %o - Aceptar un número y convertirlo en formato de número octal

  • %u - acepta un número y lo convierte en un formato de número entero sin signo

  • %x - acepta un número y lo convierte en un formato de número hexadecimal, utilizando minúsculas

  • %X - acepta un número y lo convierte en un formato de número hexadecimal, utilizando mayúsculas

  • %e - acepta un número y lo convierte en un formato de notación científica, utilizando minúsculas e

  • %E - acepta un número y lo convierte en un formato de notación científica, utilizando mayúsculas E

  • %f - acepta un número y lo convierte en un formato de número flotante

  • %g(%G) - acepta un número y lo convierte en un formato más corto de %e(%E, equivalente a %G)

  • %q - acepta una cadena y la convierte en un formato seguro para que el compilador de Lua la lea

  • %s - acepta una cadena y la formatea según los parámetros dados

) parámetros: se leerán en el siguiente orden:

  • (1) para afinar aún más el formato, se puede agregar parámetros después del %+) símbolo: un

  • (2) marcador de posición: un 0, se utiliza como marcador de posición cuando se especifica el ancho de la cadena. El marcador de posición predeterminado en caso de no especificar es un espacio.

  • (3) identificador de alineación: por defecto se alinea a la derecha cuando se especifica el ancho de la cadena, aumentando-) puede cambiarse a alineación izquierda.

  • (4) número de ancho

  • (5) dígitos decimales/cortar cadena: en la parte decimal del número de ancho, si sigue con f(indicador de número flotante, como %6.3f) establece que el decimal del número flotante solo mantenga n dígitos, si sigue con s(indicador de cadena, como %5.3s) establece que la cadena solo muestre los primeros n caracteres.

string1 = "Lua"
string2 = "Tutorial"
número1 = 10
número2 = 20
-- formateo de cadena básica
print(string.format("formateo básico %s %s",string1,string2))
-- formateo de fecha
date = 2; month = 1; year = 2014
print(string.format("formateo de fecha %02d/%02d/%03d", date, month, year))
-- formateo decimal
print(string.format("%.",4f",1/3))

El resultado de ejecutar el código anterior es:

formateo básico Tutorial
formateo de fecha 02/01/2014
0.3333

otros ejemplos:

string.format("%c", 83)                 -- salida S
string.format("%+d", 17.0)              -- Salida+17
string.format("%05d", 17)               -- salida 00017
string.format("%o", 17)                 -- Salida21
string.format("眻, 3.14)               -- Salida3
string.format("%x", 13)                 -- salida d
string.format("%X", 13)                 -- Salida D
string.format("%e", 1000)               -- Salida1.000000e+03
string.format("%E", 1000)               -- Salida1.000000E+03
string.format("%6.3f", 13)              -- Salida13.000
string.format("%q", "One\nTwo")         -- Salida "One\
                                        --   "Two"
string.format("%s", "monkey")           -- Salida monkey
string.format("%10s, "monkey")         -- Salida monkey
string.format("%5.3s, "monkey")        -- Salida mon

Conversión mutua de caracteres e enteros

El siguiente ejemplo muestra la conversión mutua de caracteres e enteros:

-- Conversión de caracteres
-- Conversión del primer carácter
print(string.byte("Lua"))
-- Conversión del tercer carácter
print(string.byte("Lua",3))
-- Conversión del primer carácter al final
print(string.byte("Lua",-1))
-- Segundo carácter
print(string.byte("Lua",2))
-- Conversión del segundo carácter al final
print(string.byte("Lua",-2))
-- Conversión de código ASCII a carácter
print(string.char(97))

El resultado de ejecutar el código anterior es:

76
97
97
117
117
a

Funciones comunes

El siguiente ejemplo muestra otras operaciones de cadenas de caracteres, como calcular la longitud de la cadena, concatenar cadenas, copiar cadenas, etc.:

string1 = "www."
string2 = "w3codebox"
string3 = ".com"
-- usando .. para concatenar cadenas
print("Cadena concatenada",string1..string2..string3)
-- Longitud de la cadena
print("Longitud de cadena",string.len(string2))
-- Copia de cadena 2 vez
repeatedString = string.rep(string2,2)
print(repeatedString)

El resultado de ejecutar el código anterior es:

Conexión de cadenas es.oldtoolbag.com
Longitud de la cadena     5
w3codeboxw3codebox

Patrón de coincidencia

Los patrones de coincidencia en Lua se describen directamente con cadenas normales. Se utilizan en funciones de coincidencia de patrones string.find, string.gmatch, string.gsub, string.match.

También puedes usar caracteres clase en la cadena de patrones.

Un patrón de caracteres clase puede coincidir con cualquier carácter dentro de un conjunto de caracteres específico. Por ejemplo, el carácter clase %d Coincidencia de cualquier número. Por lo tanto, puedes usar la cadena de patrones %d%d/%d%d/%d%d%d%d Búsqueda dd/mm/aaaa Formato de fecha:

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 siguiente tabla enumera todas las clases de caracteres admitidas por Lua:

carácter individual (excepto ^$()%.[]*+-? fuera): Coincide con el carácter propio

  • .(punto): Coincide con cualquier carácter

  • %a: Coincide con cualquier carácter alfabético

  • %c: Coincide con cualquier carácter de control (por ejemplo \n)

  • %d: Coincide con cualquier número

  • %l: Coincide con cualquier carácter minúscula

  • %p: Coincide con cualquier puntuación (punctuation)

  • %s: Coincide con cualquier carácter en blanco

  • ᧸incide con cualquier letra mayúscula

  • %w: Coincide con cualquier carácter alfabético/número coincide

  • %x: Coincide con cualquier número hexadecimal

  • %z: Coincide con cualquier carácter que representa 0

  • %x(aquí x es un carácter no alfabético no numérico): Coincide con el carácter x. Se utiliza principalmente para manejar caracteres funcionales en la expresión (^$()%.[]*+-?) problemas de coincidencia de pares, por ejemplo, %% coincide con %

  • [número de caracteres de clase]: Coincide con cualquier carácter que pertenezca a la clase incluida en []. Por ejemplo, [%w_] coincide con cualquier carácter alfabético./número, o el símbolo de subrayado (_) coincide.

  • [^número de caracteres de clase]: Coincide con cualquier carácter que no pertenezca a la clase incluida en []. Por ejemplo, [^%s] coincide con cualquier carácter no en blanco.

Cuando los caracteres de la clase se escriben en mayúsculas, significan coincidir con cualquier carácter que no pertenezca a esta clase. Por ejemplo, %S coincide con cualquier carácter no en blanco. Por ejemplo, '%A' coincide con cualquier carácter no alfabético:

> print(string.gsub("hello, up-down!"%A","."))
hello..up.down.    4

número4No es parte del resultado de la cadena, es el segundo resultado devuelto por gsub, que representa la cantidad de veces que se produjo el reemplazo.

En la coincidencia de patrones, hay algunos caracteres especiales que tienen un significado especial, los caracteres especiales en Lua son los siguientes:

( ) . % + - * ? [ ^ $

'%' se utiliza como carácter de escape para caracteres especiales, por lo tanto '%.' coincide con el punto; '%%' coincide con el carácter '%'. El carácter de escape '%' no solo se puede usar para caracteres especiales, sino también para todos los caracteres no alfabéticos.

Una entrada de patrón puede ser:

  • Una clase de caracteres individuales coincidirá con cualquier carácter individual de esta clase;

  • Una clase de caracteres individuales seguida de un '''*', Coincidirá con cero o más de los caracteres de esta clase. Esta entrada siempre coincidirá con la cadena más larga posible;

  • Una clase de caracteres individuales seguida de un '''+', Coincidirá con uno o más de los caracteres de esta clase. Esta entrada siempre coincidirá con la cadena más larga posible;

  • Una clase de caracteres individuales seguida de un '''-', Coincidirá con cero o más de los caracteres de esta clase. y '*Diferente de ' Esta entrada siempre coincidirá con la cadena más corta posible;

  • Una clase de caracteres individuales seguida de un '?', Coincidirá con cero o uno de los caracteres de esta clase. Siempre que sea posible, coincidirá con uno;

  • %n, Aquí n Se puede obtener desde 1 a 9; Esta entrada coincide con un igual n La subcadena del objeto capturado (se describe más adelante).

  • %bxy, Aquí x y y Son dos caracteres claros; Esta entrada coincide con x Inicio y Finalizar Y entre ellos x y y Mantener Equilibrio La cadena. Significa que, si se lee esta cadena de izquierda a derecha, para cada vez que se lee unax , +1 Leyendo un y , -1, Final en el que y Es el primero que cuenta hasta 0 y. Por ejemplo, la entrada %b() puede coincidir con una expresión de corchetes equilibrados.

  • set] Se refiere a Patrón de frontera; Esta entrada coincidirá con una ubicación ubicada set Un espacio en blanco antes de un carácter en Y esta posición no pertenece a set . Conjunto set El significado es como se describió anteriormente. El cálculo del inicio y el final de la cadena vacía coincidente se considera que hay un carácter '\0' de la misma manera.

Patrón:

Patrón Se refiere a una secuencia de entradas de patrón. Añadiendo el símbolo '^' al principio del patrón, el proceso de coincidencia se ancla desde el principio de la cadena. Añadiendo el símbolo '$' al final del patrón, el proceso de coincidencia se ancla al final de la cadena. Si '^' y '$' aparecen en otras posiciones, no tienen significado especial, solo representan a sí mismos.

Captura:

Un patrón puede encerrar un subpatrón entre paréntesis pequeños; Estos subpatrones se llaman Capturas. Cuando se produce una coincidencia exitosa, por Capturas Las subcadenas coincidentes se guardan para uso futuro. Las capturas se numeran en el orden de los paréntesis abiertos. Por ejemplo, para el patrón "(a*(.)%w(%s*))", La cadena coincide con "a*(.)%w(%s*)" de la parte se guarda en la primera captura (Por lo tanto, es el número 1 ); Los caracteres coincidentes con "." son 2 Número de captura, Coincidencia con "%s*La parte que sigue a "" es 3 Número.

Como una excepción, una captura vacía () capturará la posición actual de la cadena (es un número). Por ejemplo, si se aplica el patrón "()aa()" a la cadena "flaaap", se producirán dos capturas: 3 y 5 .