字符串库教程 |
|
注意:在 Lua 中,字符串索引从索引值 1 开始,而不是索引值 0,并且可以为负数。负索引是具有反向顺序的索引。例如,“miner”的 -2 是“e”,因此 -1 是 #s(s 是字符串)。
返回传递的字符串中 s[i] 到 s[j] 的数值代码(您可以搜索数值代码列表)。
> = string.byte("ABCDE") -- no index, so the First character 65 > = string.byte(" ") --Whitespace also has its own numerical code 32 > = string.byte("H A I") -- Thus, #s of this string is 5 not 3 > = string.byte("ABCDE",1) -- indexes start at 1 65 > = string.byte("ABCDE",0) -- we're not using C > = string.byte("ABCDE",100) -- index out of range, no value returned > = string.byte("ABCDE",3,4) 67 68 > s = "ABCDE" > = s:byte(3,4) -- can apply directly to string variable 67 68
生成一个表示作为参数传递的字符代码的字符串。数值代码在不同平台之间不一定可移植。
> = string.char(65,66,67) ABC > = string.char() -- empty string
返回给定函数的二进制表示,以便稍后对该字符串进行 loadstring 返回函数的副本。函数必须是没有任何上值的 Lua 函数。
在传递的字符串中查找模式的第一个出现位置。如果找到模式的实例,则返回一对值,表示字符串的开始和结束。如果找不到模式,则返回 nil
。
> = string.find("Hello Lua user", "Lua") 7 9 > = string.find("Hello Lua user", "banana") nil
> = string.find("Hello Lua user", "Lua", 1) -- start at first character 7 9 > = string.find("Hello Lua user", "Lua", 8) -- "Lua" not found again after character 8 nil > = string.find("Hello Lua user", "e", -5) -- first "e" 5 characters from the end 13 13
plain
关闭模式匹配功能。plain
接受布尔值,并且必须在 index
之前。例如:
> = string.find("Hello Lua user", "%su") -- find a space character followed by "u" 10 11 > = string.find("Hello Lua user", "%su", 1, true) -- turn on plain searches, now not found nil
从提供的格式和参数创建格式化的字符串。这类似于 C 中的 printf("format",...)
函数。附加选项 %q
会在字符串参数的值周围加上引号。
> = string.format("%s %q", "Hello", "Lua user!") -- string and quoted string Hello "Lua user!" > = string.format("%c%c%c", 76, 117, 97) -- char Lua > = string.format("%e, %E", math.pi, math.pi) -- exponent 3.141593e+000, 3.141593E+000 > = string.format("%f", math.pi) -- float 3.141593 > = string.format("%g, %g", math.pi, 10^9) -- float or exponent 3.14159, 1e+09 > = string.format("%d, %i, %u", -100, -100, -100) -- signed, signed, unsigned integer -100, -100, 4294967196 > = string.format("%o, %x, %X", -100, -100, -100) -- octal, hexadecimal, hexadecimal 37777777634, ffffff9c, FFFFFF9C > = string.format("%a, %A", 127, 127) -- hexadecimal with binary exponent (lowercase, uppercase) 0x1.fcp+6, 0X1.FCP+6
选项 A、a 可能在 Lua 5.2 及更高版本中可用。
这将返回一个模式查找迭代器。迭代器将搜索传递的字符串,查找您传递的模式的实例。
> for word in string.gmatch("Hello Lua user", "%a+") do print(word) end Hello Lua user
这是一个非常强大的函数,可以以多种方式使用。简单地使用它可以将提供的模式的所有实例替换为替换。返回一对值,即修改后的字符串和进行的替换次数。可选的第四个参数n
可用于限制进行的替换次数。
> = string.gsub("Hello banana", "banana", "Lua user") Hello Lua user 1 > = string.gsub("banana", "a", "A", 2) -- limit substitutions made to 2 bAnAna 2
就像string.find()
一样,我们可以使用模式在字符串中搜索。模式在PatternsTutorial中介绍。如果使用捕获,则可以使用%capture_index表示法在替换字符串中引用它,例如:
> = string.gsub("banana", "(an)", "%1-") -- capture any occurences of "an" and replace ban-an-a 2 > = string.gsub("banana", "a(n)", "a(%1)") -- brackets around n's which follow a's ba(n)a(n)a 2 > = string.gsub("banana", "(a)(n)", "%2%1") -- reverse any "an"s bnanaa 2
如果替换是一个函数,而不是一个字符串,则传递给函数的参数是任何进行的捕获。如果函数返回一个字符串,则返回的值将替换回字符串。
> = string.gsub("Hello Lua user", "(%w+)", print) -- print any words found Hello Lua user 3 > = string.gsub("Hello Lua user", "(%w+)", function(w) return string.len(w) end) -- replace with lengths 5 3 4 3 > = string.gsub("banana", "(a)", string.upper) -- make all "a"s found uppercase bAnAnA 3 > = string.gsub("banana", "(a)(n)", function(a,b) return b..a end) -- reverse any "an"s bnanaa 2
模式捕获:最常见的模式捕获实例可能是
> = string.gsub("The big {brown} fox jumped {over} the lazy {dog}.","{(.-)}", function(a) print(a) end ) brown over dog > = string.gsub("The big {brown} fox jumped {over} the lazy {dog}.","{(.*)}", function(a) print(a) end ) brown} fox jumped {over} the lazy {dog
返回传递的字符串的长度。
> = string.len("Lua") 3 > = string.len("") 0 > = string.len("Lua\000user") -- Lua strings are 8 bytes pure so \000 does not terminate 8
将大写字符转换为小写。
> = string.lower("Hello, Lua user!") hello, lua user!
通过匹配模式提取子字符串。
> = 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"
生成一个字符串,该字符串是传递的字符串的 n 个副本连接在一起。
> = string.rep("Lua ",5) Lua Lua Lua Lua Lua > = string.rep("Lua\n",3) Lua Lua Lua
反转字符串。
> = string.reverse("lua") aul
返回传递的字符串的子字符串。子字符串从i
开始。如果第三个参数j
没有给出,则子字符串将以字符串的结尾结束。如果给出第三个参数,则子字符串以j
结束并包含j
。
> = string.sub("Hello Lua user", 7) -- from character 7 including 7 until the end Lua user > = string.sub("Hello Lua user", 7, 9) -- from character 7 until and including 9 Lua > = string.sub("Hello Lua user", -8) -- 8 from the end until the end Lua user > = string.sub("Hello Lua user", -8, 9) -- 8 from the end until 9 from the start Lua > = string.sub("Hello Lua user", -8, -6) -- 8 from the end until 6 from the end Lua
将所有小写字符转换为大写。
> = string.upper("Hello, Lua user!") HELLO, LUA USER!