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

LuaZeichenketten

Zeichenkette oder String besteht aus einer Abfolge von Ziffern, Buchstaben und Unterstrichen.

In Lua können Zeichenketten mit folgenden drei Methoden dargestellt werden:

  • eine Abfolge von Zeichen zwischen eckigen Klammern.

  • eine Abfolge von Zeichen zwischen Anführungszeichen.

  • [[ und ]] eine Abfolge von Zeichen.

Nachfolgende Beispiele zeigen die drei oben genannten Methoden zur Darstellung von Zeichenketten:

string1 = "Lua"
print("\"string 1 Ist "",string1)
string2 = 'oldtoolbag.com'
print("string 2 Ist ",string2)
string3 = [["Lua 教程"]]
print("string 3 Ist ",string3)

Die Ausgabe des obigen Codes ist:

"Zeichenkette 1 Ist "
字符串 2 Ist3codebox.com
字符串 3 Ist

Escape-Zeichen werden verwendet, um Zeichen darzustellen, die nicht direkt angezeigt werden können, wie z.B. die Rücktaste, die Enter-Taste usw. Wenn man z.B. doppelte Anführungszeichen in einer Zeichenkette verwenden möchte, kann man "\"" verwenden.

Alle Escape-Zeichen und ihre Bedeutung:

Escape-Zeichen
Bedeutung
ASCII-Wert (Dezimal)
\a
Lautsprecherklang (BEL)
007
\b
Backspace (BS), verschiebt den aktuellen Positionspunkt zum vorherigen Spalten
008
\f
Page Feed (FF), verschiebt den aktuellen Positionspunkt zum Anfang der nächsten Seite
012
\n
Line Feed (LF), verschiebt den aktuellen Positionspunkt zum Anfang der nächsten Zeile
010
\r
Carriage Return (CR), verschiebt den aktuellen Positionspunkt zum Anfang der aktuellen Zeile
013
\t
Horizontale Tabulator (HT) (springe zur nächsten TAB-Position)
009
\v
Vertikale Tabulator (VT)
011
\\
stellt ein Backslash-Zeichen dar
092
\'
stellt ein einfaches Anführungszeichen-Zeichen (Apostroph) dar
039
\"
stellt einen doppelten Anführungszeichen-Zeichen dar
034
\0
Leerzeichen (NULL)
000
\ddd
1bis3jeglicher Buchstabe, der durch die oktale Zahl repräsentiert wird
dreiствellige oktale Zahl
\xhh
1bis2jeglicher Buchstabe, der durch die sechzehnstellige Zahl repräsentiert wird
zweistellige sechzehnstellige Zahl

Zeichenkettenoperationen

Lua bietet viele Methoden, um die Verarbeitung von Zeichenketten zu unterstützen:

NummerMethode & Zweck
1string.upper(argument):
wandel die Zeichenkette vollständig in große Buchstaben um.
2string.lower(argument):
wandel die Zeichenkette vollständig in kleine Buchstaben um.
3string.gsub(mainString,findString,replaceString,num)

ersetzt in der Zeichenkette.

mainString ist die zu verarbeitende Zeichenkette, findString ist das zu ersetzende Zeichen, replaceString ist das zu ersetzende Zeichen, num ist die Anzahl der Ersetzungen (kann ignoriert werden, dann wird alles ersetzt), z.B.:
> string.gsub("aaaa","a","z",3);
zzza    3
4string.find (str, substr, [init, [end]])
sucht in einer angegebenen Zielzeichenkette nach einem bestimmten Inhalt (der dritte Parameter ist der Index), gibt die genaue Position zurück. Gibt es ihn nicht zurück, gibt nil zurück.
> string.find("Hello Lua user", "Lua", 1) 
7    9
5string.reverse(arg)
Zeichenkette umkehren
> string.reverse("Lua")
auL
6string.format(...)
gibt eine formatierte Zeichenkette ähnlich wie printf zurück
> string.format("der Wert ist:%d",4)
der Wert ist:4
7string.char(arg) und string.byte(arg[,int])
char wandelt einen Integer in ein Zeichen um und fügt es hinzu, byte wandelt ein Zeichen in einen Integer um (es kann ein bestimmtes Zeichen angegeben werden, Standard ist der erste Buchstabe).
> string.char(97,98,99,100)
abcd
> string.byte("ABCD",4)
68
> string.byte("ABCD")
65
>
8string.len(arg)
berechnet die Länge der Zeichenkette.
string.len("abc")
3
9string.rep(string, n)
gibt die n-fachen Kopie der Zeichenkette string zurück
> string.rep("abcd",2)
abcdabcd
10..
链接两个字符串
> print("www.w3codebox.".."com")
de.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--suffix"
print("\n原始字符串", string.format("%q", sourcestr))
-- 截取部分,第1个到第15ein
local first_sub = string.sub(sourcestr, 4, 15)
print("\n第一次截取", string.format("%q", first_sub))
-- 取字符串前缀,第1个到第8ein
local second_sub = string.sub(sourcestr, 1, 8)
print("\nZweite Auskopplung", string.format("%q", second_sub))
-- Abschneiden des Endes10ein
local third_sub = string.sub(sourcestr, -10)
print("\nDritte Auskopplung", string.format("%q", third_sub))
-- Index out of bounds, output the original string
local fourth_sub = string.sub(sourcestr, -100)
print("\nVierte Auskopplung", string.format("%q", fourth_sub))

Das Ergebnis des obigen Codes ist:

Ursprüngliche Zeichenfolge    "prefix--w3codeboxgoogletaobao--suffix"
Erste Auskopplung    "fix--w3codeboxg"
Zweite Auskopplung    "prefix--"
Dritte Auskopplung    "ao--suffix"
Vierte Auskopplung    "prefix--w3codeboxgoogletaobao--suffix"

Groß- und Kleinschreibung in Zeichenfolgen

Nachfolgende Beispiele demonstrieren, wie Groß- und Kleinschreibung in Zeichenfolgen umgewandelt wird:

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

Das Ergebnis des obigen Codes ist:

LUA
lua

Zeichenfolgensuche und Reverse

Nachfolgende Beispiele demonstrieren, wie Such- und Reverse-Operationen an Zeichenfolgen durchgeführt werden:

string = "Lua Tutorial"
-- Zeichenfolgensuche
print(string.find(string,"Tutorial"))
reversedString = string.reverse(string)
print("Neue Zeichenfolge", reversedString)

Das Ergebnis des obigen Codes ist:

5    12
Die neue Zeichenfolge ist    lairotuT auL

Zeichenfolgenformatierung

Lua bietet die Funktion string.format() an, um Zeichenfolgen mit einer bestimmten Formatierung zu generieren, wobei der erste Parameter das Format ist, gefolgt von den verschiedenen Daten, die zu den Symbolen im Format gehören.

Durch die Präsenz der Formatierungszeichenfolgen wird die Lesbarkeit der erzeugten langen Zeichenfolgen erheblich verbessert. Diese Funktion ähnelt stark der printf()-Funktion in der Sprache C.

Nachfolgende Beispiele demonstrieren, wie Formatierungsoperationen an Zeichenfolgen durchgeführt werden:

Die Formatierungszeichenfolgen können die folgenden Escape-Codes enthalten:

  • %c - Eine Zahl wird akzeptiert und in den Character im ASCII-Zeichensatz umgewandelt

  • %d, %i - Eine Zahl wird akzeptiert und in den Formatierungsstil einer signifikanten Zahl umgewandelt

  • %o - Eine Zahl wird akzeptiert und in den Formatierungsstil der oktalen Zahl umgewandelt

  • %u - 接受一个数字并将其转化为无符号整数格式

  • Akzeptiert eine Zahl und konvertiert sie in ein ungesignes Integerformat - %x

  • Akzeptiert eine Zahl und konvertiert sie in ein Hexadezimalformat, verwendet Kleinbuchstaben - %X

  • Akzeptiert eine Zahl und konvertiert sie in ein Hexadezimalformat, verwendet Grossbuchstaben - %e

  • Akzeptiert eine Zahl und konvertiert sie in ein wissenschaftliches Notationsformat, verwendet Kleinbuchstaben e - %E

  • Akzeptiert eine Zahl und konvertiert sie in ein wissenschaftliches Notationsformat, verwendet Grossbuchstaben E - %f

  • Akzeptiert eine Zahl und konvertiert sie in ein Fließkommazahlformat - %g(%G)

  • Akzeptiert eine Zahl und konvertiert sie in eine der kürzeren Formate von %e (%E, entspricht %G) und %f - %q

  • Akzeptiert einen String und konvertiert ihn in ein Format, das sicher von dem Lua-Compiler gelesen werden kann - %s

Akzeptiert einen String und formatiert diesen nach angegebenen Parametern

  • (1) Um das Format weiter zu verfeinern, können Parameter nach dem %-Zeichen hinzugefügt werden. Die Parameter werden in der folgenden Reihenfolge gelesen:+) Symbol: Ein

  • (2) Platzhalter: Ein 0, der als Platzhalter verwendet wird, wenn nach der Zeichenkettenbreite spezifiziert ist. Der Standardplatzhalter ist ein Leerzeichen, wenn nicht ausgefüllt.

  • (3) Ausrichtungssymbol: Bei angegebener Zeichenkettenbreite ist die Voreinstellung rechtsbündig, erhöhen-) Nummer kann auf linksbündige Ausrichtung geändert werden.

  • (4) Breitenwert

  • (5) Dezimalstellen/Zeichenkettenbeschnitt: Nach der Breitenangabe hinzugefügtes Dezimalteil n, falls f (Fließkommazahlskript, wie %) follows (6.3f) dann wird der Dezimalteil der Fließkommazahl auf n Stellen beschränkt, falls s (Zeichenkettenskript, wie %) follows (5.3s) dann wird die Zeichenkette nur die ersten n Zeichen anzeigen.

string1 = "Lua"
string2 = "Tutorial"
number1 = 10
number2 = 20
-- Grundlegende Zeichenkettenformatierung
print(string.format("Grundlegende Formatierung %s %s",string1,string2))
-- Datum formatieren
date = 2; month = 1; year = 2014
print(string.format("Datum formatieren %02d/%02d/%03d", date, month, year))
-- Dezimal formatieren
print(string.format("%.",4f",1/3))

Das Ergebnis des obigen Codes ist:

Grundlegende Formatierung Lua Tutorial
Datum formatieren 02/01/2014
0.3333

andere Beispiele:

string.format("%c", 83)                 -- ausgeben S
string.format("%%+d", 17.0)              -- Ausgabe+17
string.format("%05d", 17)               -- ausgeben 00017
string.format("%o", 17)                 -- Ausgabe21
string.format("眻, 3.14)               -- Ausgabe3
string.format("%x", 13)                 -- ausgeben d
string.format("%X", 13)                 -- Ausgabe D
string.format("%e", 1000)               -- Ausgabe1.000000e+03
string.format("%E", 1000)               -- Ausgabe1.000000E+03
string.format("%%6.3f", 13)              -- Ausgabe13.000
string.format("%q", "One\nTwo")         -- Ausgabe "One\
                                        --   "Two"
string.format("%s", "monkey")           -- Ausgabe monkey
string.format("%%10s, "monkey"         -- Ausgabe     monkey
string.format("%%5.3s, "monkey"        -- Ausgabe     mon

Umwandlung von Zeichen und Ziffern

Nachfolgender Beispiel zeigt die Umwandlung von Zeichen und Ziffern miteinander:

-- Zeichenumwandlung
-- Umwandlung des ersten Zeichens
print(string.byte("Lua"))
-- Umwandlung des dritten Zeichens
print(string.byte("Lua",3))
-- Umwandlung des ersten Zeichens am Ende
print(string.byte("Lua",-1))
-- Zweiter Buchstabe
print(string.byte("Lua",2))
-- Umwandlung des letzten zweiten Zeichens
print(string.byte("Lua",-2))
-- Ziffer in ASCII-Wert konvertieren
print(string.char(97))

Das Ergebnis des obigen Codes ist:

76
97
97
117
117
a

Andere häufig verwendete Funktionen

Nachfolgender Beispiel zeigt andere Zeichenkettenoperationen, wie die Berechnung der Länge der Zeichenkette, die Verbindung der Zeichenkette, die Kopie der Zeichenkette usw.:

string1 = "www."
string2 = "w3codebox
string3 = ".com"
-- Verwenden Sie ". .." für die Verbindung von Zeichenketten
print("Verbinden von Zeichenketten",string1..string2..string3)
-- Länge der Zeichenkette
print("Länge der Zeichenkette ",string.len(string2))
-- Zeichenkette kopieren 2 mal
repeatedString = string.rep(string2,2)
print(repeatedString)

Das Ergebnis des obigen Codes ist:

Verbinden von Zeichenketten     de.oldtoolbag.com
Länge der Zeichenkette     5
w3codeboxw3codebox

Muster Matching

Lua-Muster werden direkt mit regulären Strings beschrieben. Sie werden von Muster Matching Funktionen verwendet. string.find, string.gmatch, string.gsub, string.match.

Sie können auch Zeichenklassen in Musterstrings verwenden.

Ein Zeichenklasse ist ein Muster, das jede Ziffer in einer bestimmten Zeichensetzung ausgibt. Zum Beispiel, Zeichenklasse %d passend für jede Ziffer. Daher können Sie den Musterstring %d%d verwenden/%d%d/%d%d%d%d Suchen dd/mm/yyyy 格式的日期:

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

Die folgende Tabelle listet alle Zeichensätze auf, die Lua unterstützt:

einzelnes Zeichen (außer ^$()%.[]*+-? außen): Übereinstimmung mit dem Zeichen selbst

  • .(Punkt): Übereinstimmung mit jedem Zeichen

  • %a: Übereinstimmung mit jedem Alphabetzeichen

  • %c: Übereinstimmung mit jedem Kontrollzeichen (z.B. \n)

  • %d: Übereinstimmung mit jedem Zahl

  • %l: Übereinstimmung mit jedem Kleinbuchstaben

  • %p: Übereinstimmung mit jedem Punctuationzeichen

  • %s: Übereinstimmung mit jedem Leerzeichen

  • ⍛ereinstimmung mit jedem Großbuchstaben

  • %w: Übereinstimmung mit jedem Alphabetzeichen/Zahlenpaarungen

  • %x: Übereinstimmung mit jedem hexadezimalen Zahl

  • %z: Übereinstimmung mit jedem Zeichen, das 0 darstellt

  • %x(wo x ein nicht-alphabetisches nicht-numerisches Zeichen ist): Übereinstimmung mit dem Zeichen x. Hauptsächlich verwendet, um funktionale Zeichen im Ausdruck zu behandeln (^$()%.[]*+-?)-Paarungsprobleme, zum Beispiel %% mit %

  • [Zahlung von Zeichenklassen]: Übereinstimmung mit jeder Klasse, die in [] enthalten ist. Zum Beispiel entspricht[%w_] jedem Alphabetzeichen/Zahlen, oder Unterstrichsymbol (_) matchen

  • [^Zahlung von Zeichenklassen]: Übereinstimmung mit jedem Zeichen, das nicht in [] enthalten ist. Zum Beispiel entspricht[^%s] jedem nicht-leeren Zeichen.

Wenn die Zeichenklasse in Großbuchstaben geschrieben wird, bedeutet dies eine Übereinstimmung mit jedem Zeichen außerhalb dieser Klasse. Zum Beispiel entspricht %S jedem nicht-leeren Zeichen. Zum Beispiel entspricht '%A' jedem nicht-alphabetischen Zeichen:

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

Zahlen4nicht Teil des Stringergebnisses, sondern der zweite Rückgabewert von gsub, der die Anzahl der发生的替换次数.

In der Musterzuordnung gibt es einige spezielle Zeichen, die eine spezielle Bedeutung haben, die speziellen Zeichen in Lua sind wie folgt:

( ) . % + - * ? [ ^ $

'%' wird als Fluchtpunkt für spezielle Zeichen verwendet, daher matcht '%.' einen Punkt; '%%' matcht das Zeichen '%'. Der Fluchtpunkt '%' kann nicht nur verwendet werden, um spezielle Zeichen zu escapen, sondern auch für alle nicht-alphabetischen Zeichen.

Ein Muster-Eintrag kann sein:

  • Ein einziger Zeichensatzklasse matcht jeden einzelnen Zeichen im Zeichensatz;

  • Ein einziger Zeichensatzklasse gefolgt von einem '''*', wird es null oder mehrere derartige Zeichenfolgen matchen. Dieser Eintrag wird immer den längsten String matchen;

  • Ein einziger Zeichensatzklasse gefolgt von einem '''+', wird es ein oder mehrere derartige Zeichenfolgen matchen. Dieser Eintrag wird immer den längsten String matchen;

  • Ein einziger Zeichensatzklasse gefolgt von einem '''-', wird es null oder mehrere derartige Zeichenfolgen matchen. und '*unterschiedlich von ' Dieser Eintrag wird immer den kürzesten String matchen;

  • Ein einziger Zeichensatzklasse gefolgt von einem '?', wird es null oder einen derartigen Zeichensatz matchen. wird es immer einen Wert matchen, wenn möglich;

  • %n, hier n kann von 1 bis 9; Dieser Eintrag entspricht einem Wert, der gleich n Substrings des beschriebenen Objekts (siehe unten).

  • %bxy, hier x und y sindzweiklareZeichen; dieserEintragpasstzu x beginnt y endet unddieser x und y behalten ausbalanciert derString bedeutet,dasswennmanvonlinksrechtsdiesenStringliestx daher +1 ,wennmanvonlinksrechtsdiesenStringliest y daher -1, derletzteimEnde y istderersteZählerbis0 y. EinBeispiel,dieEintrag%b()kannausgedrückteKlammernausbalanciertenAusdrückenpassen.

  • %f[set], bezeichnet Randmuster; dieserEintragwirdzuamOrtgematcht,der set innerhalbderZeichenketteeinerleerenZeichenkettevor unddieserPositionvormVorgängercharakternichtzu set . Sammlung set Bedeutungwieobenbeschrieben. DieBerechnungdesBeginnsundEndesderleerenZeichenkette, diegefundenwird,entsprichtdemOrt,an demeinZeichenist. '\0' gleich.

Muster:

Muster EinMusterbezugsketten DurchHinzufügendesZeichens '^' amAnfang desMusterswirdderAbgleichvomAnfangderZeichenketteausgeführt. DurchHinzufügendesZeichens '$' amEnde desMusterswirdderAbgleichprozessamEnde derZeichenketteankern. Wenn '^' und '$' ananderenOrtenauftauchen,haben siekeinespezialenBedeutung,sondernstellennursichselbstdar.

Kapturen:

EinMusterkanninnerhalbkleinerKlammerneineUntermusterangeben; DieseMusterbezeichnenwerden Kapturen. wenn derAbgleicherfolgreichist, von Kapturen DieunterstricheneZeichenkettenindergematchtenZeichenkettenwerdenzurzukünftigenVerwendunggespeichert. KapturenwerdeninreihenfolgerderlinkschließendenKlammernnumeriert. Zum Beispiel, für dasMuster "(a*(.)%w(%s*))" , DerimStringgematchte "a*(.)%w(%s*)"TeilindererstenKapturen gespeichert (DaheristderNummer 1 ); von "." gematchteZeichen sind 2 Kapturennummer auf "%s" gematcht*DasTeilderZeichenkette, dasin""enthaltenist 3 号。

AlsSpezialfallwirdleereKapturen()diePositiondesaktuellenStrings(eristeanummer)fangen. Zum Beispiel, wenn dasMuster "()aa()" auf denString "flaaap" angewendetwird, werdenzweiKapturenproduziert: 3 und 5 .