亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Lua 字符串

字符串或串(String)是由數(shù)字、字母、下劃線組成的一串字符。

Lua 語(yǔ)言中字符串可以使用以下三種方式來(lái)表示:

  • 單引號(hào)間的一串字符。

  • 雙引號(hào)間的一串字符。

  • [[]] 間的一串字符。

以上三種方式的字符串示例如下:

string1 = "Lua"
print("\"字符串 1 是\"",string1)
string2 = '(cainiaoplus.com)'
print("字符串 2 是",string2)

string3 = [["Lua 教程"]]
print("字符串 3 是",string3)

以上代碼執(zhí)行輸出結(jié)果為:

"字符串 1 是"    Lua
字符串 2 是    (cainiaoplus.com)
字符串 3 是    "Lua 教程"

轉(zhuǎn)義字符用于表示不能直接顯示的字符,比如后退鍵,回車(chē)鍵,等。如在字符串轉(zhuǎn)換雙引號(hào)可以使用 "\""。

所有的轉(zhuǎn)義字符和所對(duì)應(yīng)的意義:

轉(zhuǎn)義字符
意義
ASCII碼值(十進(jìn)制)
\a
響鈴(BEL)
007
\b
退格(BS) ,將當(dāng)前位置移到前一列
008
\f
換頁(yè)(FF),將當(dāng)前位置移到下頁(yè)開(kāi)頭
012
\n
換行(LF) ,將當(dāng)前位置移到下一行開(kāi)頭
010
\r
回車(chē)(CR) ,將當(dāng)前位置移到本行開(kāi)頭
013
\t
水平制表(HT) (跳到下一個(gè)TAB位置)
009
\v
垂直制表(VT)
011
\\
代表一個(gè)反斜線字符''\'
092
\'
代表一個(gè)單引號(hào)(撇號(hào))字符
039
\"
代表一個(gè)雙引號(hào)字符
034
\0
空字符(NULL)
000
\ddd
1到3位八進(jìn)制數(shù)所代表的任意字符
三位八進(jìn)制
\xhh
1到2位十六進(jìn)制所代表的任意字符
二位十六進(jìn)制

字符串操作

Lua 提供了很多的方法來(lái)支持字符串的操作:

序號(hào)方法 & 用途
1string.upper(argument):
字符串全部轉(zhuǎn)為大寫(xiě)字母。
2string.lower(argument):
字符串全部轉(zhuǎn)為小寫(xiě)字母。
3string.gsub(mainString,findString,replaceString,num)

在字符串中替換。

mainString 為要操作的字符串, findString 為被替換的字符,replaceString 要替換的字符,num 替換次數(shù)(可以忽略,則全部替換),如:
> string.gsub("aaaa","a","z",3);
zzza    3
4string.find (str, substr, [init, [end]])
在一個(gè)指定的目標(biāo)字符串中搜索指定的內(nèi)容(第三個(gè)參數(shù)為索引),返回其具體位置。不存在則返回 nil。
> string.find("Hello Lua user", "Lua", 1) 
7    9
5string.reverse(arg)
字符串反轉(zhuǎn)
> string.reverse("Lua")
auL
6string.format(...)
返回一個(gè)類(lèi)似printf的格式化字符串
> string.format("the value is:%d",4)
the value is:4
7string.char(arg) 和 string.byte(arg[,int])
char 將整型數(shù)字轉(zhuǎn)成字符并連接, byte 轉(zhuǎn)換字符為整數(shù)值(可以指定某個(gè)字符,默認(rèn)第一個(gè)字符)。
> string.char(97,98,99,100)
abcd
> string.byte("ABCD",4)
68
> string.byte("ABCD")
65
>
8string.len(arg)
計(jì)算字符串長(zhǎng)度。
string.len("abc")
3
9string.rep(string, n)
返回字符串string的n個(gè)拷貝
> string.rep("abcd",2)
abcdabcd
10..
鏈接兩個(gè)字符串
> print("www.nhooo.".."com")
www.jixiangtaizi.com.cn
11string.gmatch(str, pattern)
回一個(gè)迭代器函數(shù),每一次調(diào)用這個(gè)函數(shù),返回一個(gè)在字符串 str 找到的下一個(gè)符合 pattern 描述的子串。如果參數(shù) pattern 描述的字符串沒(méi)有找到,迭代函數(shù)返回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中的第一個(gè)配對(duì). 參數(shù)init可選, 指定搜尋過(guò)程的起點(diǎn), 默認(rèn)為1。
在成功配對(duì)時(shí), 函數(shù)將返回配對(duì)表達(dá)式中的所有捕獲結(jié)果; 如果沒(méi)有設(shè)置捕獲標(biāo)記, 則返回整個(gè)配對(duì)字符串. 當(dāng)沒(méi)有成功的配對(duì)時(shí), 返回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])

參數(shù)說(shuō)明:

  • s:要截取的字符串。

  • i:截取開(kāi)始位置。

  • j:截取結(jié)束位置,默認(rèn)為 -1,最后一個(gè)字符。

-- 字符串
local sourcestr = "prefix--nhooogoogletaobao--suffix"
print("\n原始字符串", string.format("%q", sourcestr))

-- 截取部分,第1個(gè)到第15個(gè)
local first_sub = string.sub(sourcestr, 4, 15)
print("\n第一次截取", string.format("%q", first_sub))

-- 取字符串前綴,第1個(gè)到第8個(gè)
local second_sub = string.sub(sourcestr, 1, 8)
print("\n第二次截取", string.format("%q", second_sub))

-- 截取最后10個(gè)
local third_sub = string.sub(sourcestr, -10)
print("\n第三次截取", string.format("%q", third_sub))

-- 索引越界,輸出原始字符串
local fourth_sub = string.sub(sourcestr, -100)
print("\n第四次截取", string.format("%q", fourth_sub))

以上代碼執(zhí)行結(jié)果為:

原始字符串    "prefix--nhooogoogletaobao--suffix"
第一次截取    "fix--nhooog"
第二次截取    "prefix--"
第三次截取    "ao--suffix"
第四次截取    "prefix--nhooogoogletaobao--suffix"

字符串大小寫(xiě)轉(zhuǎn)換

以下示例演示了如何對(duì)字符串大小寫(xiě)進(jìn)行轉(zhuǎn)換:

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

以上代碼執(zhí)行結(jié)果為:

LUA
lua

字符串查找與反轉(zhuǎn)

以下示例演示了如何對(duì)字符串進(jìn)行查找與反轉(zhuǎn)操作:

string = "Lua Tutorial"
-- 查找字符串
print(string.find(string,"Tutorial"))
reversedString = string.reverse(string)
print("新字符串為",reversedString)

以上代碼執(zhí)行結(jié)果為:

5    12
新字符串為    lairotuT auL

字符串格式化

Lua 提供了 string.format() 函數(shù)來(lái)生成具有特定格式的字符串, 函數(shù)的第一個(gè)參數(shù)是格式 , 之后是對(duì)應(yīng)格式中每個(gè)代號(hào)的各種數(shù)據(jù)。

由于格式字符串的存在, 使得產(chǎn)生的長(zhǎng)字符串可讀性大大提高了。這個(gè)函數(shù)的格式很像 C 語(yǔ)言中的 printf()。

以下示例演示了如何對(duì)字符串進(jìn)行格式化操作:

格式字符串可能包含以下的轉(zhuǎn)義碼:

  • %c - 接受一個(gè)數(shù)字, 并將其轉(zhuǎn)化為ASCII碼表中對(duì)應(yīng)的字符

  • %d, %i - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為有符號(hào)的整數(shù)格式

  • %o - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為八進(jìn)制數(shù)格式

  • %u - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為無(wú)符號(hào)整數(shù)格式

  • %x - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為十六進(jìn)制數(shù)格式, 使用小寫(xiě)字母

  • %X - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為十六進(jìn)制數(shù)格式, 使用大寫(xiě)字母

  • %e - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為科學(xué)記數(shù)法格式, 使用小寫(xiě)字母e

  • %E - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為科學(xué)記數(shù)法格式, 使用大寫(xiě)字母E

  • %f - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為浮點(diǎn)數(shù)格式

  • %g(%G) - 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為%e(%E, 對(duì)應(yīng)%G)及%f中較短的一種格式

  • %q - 接受一個(gè)字符串并將其轉(zhuǎn)化為可安全被Lua編譯器讀入的格式

  • %s - 接受一個(gè)字符串并按照給定的參數(shù)格式化該字符串

為進(jìn)一步細(xì)化格式, 可以在%號(hào)后添加參數(shù). 參數(shù)將以如下的順序讀入:

  • (1) 符號(hào): 一個(gè)+號(hào)表示其后的數(shù)字轉(zhuǎn)義符將讓正數(shù)顯示正號(hào). 默認(rèn)情況下只有負(fù)數(shù)顯示符號(hào).

  • (2) 占位符: 一個(gè)0, 在后面指定了字串寬度時(shí)占位用. 不填時(shí)的默認(rèn)占位符是空格.

  • (3) 對(duì)齊標(biāo)識(shí): 在指定了字串寬度時(shí), 默認(rèn)為右對(duì)齊, 增加-號(hào)可以改為左對(duì)齊.

  • (4) 寬度數(shù)值

  • (5) 小數(shù)位數(shù)/字串裁切: 在寬度數(shù)值后增加的小數(shù)部分n, 若后接f(浮點(diǎn)數(shù)轉(zhuǎn)義符, 如%6.3f)則設(shè)定該浮點(diǎn)數(shù)的小數(shù)只保留n位, 若后接s(字符串轉(zhuǎn)義符, 如%5.3s)則設(shè)定該字符串只顯示前n位.

string1 = "Lua"
string2 = "Tutorial"
number1 = 10
number2 = 20
-- 基本字符串格式化
print(string.format("基本格式化 %s %s",string1,string2))
-- 日期格式化
date = 2; month = 1; year = 2014
print(string.format("日期格式化 %02d/%02d/%03d", date, month, year))
-- 十進(jìn)制格式化
print(string.format("%.4f",1/3))

以上代碼執(zhí)行結(jié)果為:

基本格式化 Lua Tutorial
日期格式化 02/01/2014
0.3333

其他實(shí)例:

string.format("%c", 83)                 -- 輸出S
string.format("%+d", 17.0)              -- 輸出+17
string.format("%05d", 17)               -- 輸出00017
string.format("%o", 17)                 -- 輸出21
string.format("%u", 3.14)               -- 輸出3
string.format("%x", 13)                 -- 輸出d
string.format("%X", 13)                 -- 輸出D
string.format("%e", 1000)               -- 輸出1.000000e+03
string.format("%E", 1000)               -- 輸出1.000000E+03
string.format("%6.3f", 13)              -- 輸出13.000
string.format("%q", "One\nTwo")         -- 輸出"One\
                                        --   Two"
string.format("%s", "monkey")           -- 輸出monkey
string.format("%10s", "monkey")         -- 輸出    monkey
string.format("%5.3s", "monkey")        -- 輸出  mon

字符與整數(shù)相互轉(zhuǎn)換

以下示例演示了字符與整數(shù)相互轉(zhuǎn)換:

-- 字符轉(zhuǎn)換
-- 轉(zhuǎn)換第一個(gè)字符
print(string.byte("Lua"))
-- 轉(zhuǎn)換第三個(gè)字符
print(string.byte("Lua",3))
-- 轉(zhuǎn)換末尾第一個(gè)字符
print(string.byte("Lua",-1))
-- 第二個(gè)字符
print(string.byte("Lua",2))
-- 轉(zhuǎn)換末尾第二個(gè)字符
print(string.byte("Lua",-2))

-- 整數(shù) ASCII 碼轉(zhuǎn)換為字符
print(string.char(97))

以上代碼執(zhí)行結(jié)果為:

76
97
97
117
117
a

其他常用函數(shù)

以下示例演示了其他字符串操作,如計(jì)算字符串長(zhǎng)度,字符串連接,字符串復(fù)制等:

string1 = "www."
string2 = "nhooo"
string3 = ".com"
-- 使用 .. 進(jìn)行字符串連接
print("連接字符串",string1..string2..string3)

-- 字符串長(zhǎng)度
print("字符串長(zhǎng)度 ",string.len(string2))

-- 字符串復(fù)制 2 次
repeatedString = string.rep(string2,2)
print(repeatedString)

以上代碼執(zhí)行結(jié)果為:

連接字符串    www.jixiangtaizi.com.cn
字符串長(zhǎng)度     5
nhooonhooo

匹配模式

Lua 中的匹配模式直接用常規(guī)的字符串來(lái)描述。 它用于模式匹配函數(shù) string.find, string.gmatch, string.gsub, string.match

你還可以在模式串中使用字符類(lèi)。

字符類(lèi)指可以匹配一個(gè)特定字符集合內(nèi)任何字符的模式項(xiàng)。比如,字符類(lèi) %d 匹配任意數(shù)字。所以你可以使用模式串  %d%d/%d%d/%d%d%d%d 搜索 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

下面的表列出了Lua支持的所有字符類(lèi):

單個(gè)字符(除 ^$()%.[]*+-? 外): 與該字符自身配對(duì)

  • .(點(diǎn)): 與任何字符配對(duì)

  • %a: 與任何字母配對(duì)

  • %c: 與任何控制符配對(duì)(例如\n)

  • %d: 與任何數(shù)字配對(duì)

  • %l: 與任何小寫(xiě)字母配對(duì)

  • %p: 與任何標(biāo)點(diǎn)(punctuation)配對(duì)

  • %s: 與空白字符配對(duì)

  • %u: 與任何大寫(xiě)字母配對(duì)

  • %w: 與任何字母/數(shù)字配對(duì)

  • %x: 與任何十六進(jìn)制數(shù)配對(duì)

  • %z: 與任何代表0的字符配對(duì)

  • %x(此處x是非字母非數(shù)字字符): 與字符x配對(duì). 主要用來(lái)處理表達(dá)式中有功能的字符(^$()%.[]*+-?)的配對(duì)問(wèn)題, 例如%%與%配對(duì)

  • [數(shù)個(gè)字符類(lèi)]: 與任何[]中包含的字符類(lèi)配對(duì). 例如[%w_]與任何字母/數(shù)字, 或下劃線符號(hào)(_)配對(duì)

  • [^數(shù)個(gè)字符類(lèi)]: 與任何不包含在[]中的字符類(lèi)配對(duì). 例如[^%s]與任何非空白字符配對(duì)

當(dāng)上述的字符類(lèi)用大寫(xiě)書(shū)寫(xiě)時(shí), 表示與非此字符類(lèi)的任何字符配對(duì). 例如, %S表示與任何非空白字符配對(duì).例如,'%A'非字母的字符:

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

數(shù)字4不是字符串結(jié)果的一部分,他是gsub返回的第二個(gè)結(jié)果,代表發(fā)生替換的次數(shù)。

在模式匹配中有一些特殊字符,他們有特殊的意義,Lua中的特殊字符如下:

( ) . % + - * ? [ ^ $

'%' 用作特殊字符的轉(zhuǎn)義字符,因此 '%.' 匹配點(diǎn);'%%' 匹配字符 '%'。轉(zhuǎn)義字符 '%'不僅可以用來(lái)轉(zhuǎn)義特殊字符,還可以用于所有的非字母的字符。

模式條目可以是:

  • 單個(gè)字符類(lèi)匹配該類(lèi)別中任意單個(gè)字符;

  • 單個(gè)字符類(lèi)跟一個(gè) '*', 將匹配零或多個(gè)該類(lèi)的字符。 這個(gè)條目總是匹配盡可能長(zhǎng)的串;

  • 單個(gè)字符類(lèi)跟一個(gè) '+', 將匹配一或更多個(gè)該類(lèi)的字符。 這個(gè)條目總是匹配盡可能長(zhǎng)的串;

  • 單個(gè)字符類(lèi)跟一個(gè) '-', 將匹配零或更多個(gè)該類(lèi)的字符。 和 '*' 不同, 這個(gè)條目總是匹配盡可能短的串;

  • 單個(gè)字符類(lèi)跟一個(gè) '?', 將匹配零或一個(gè)該類(lèi)的字符。 只要有可能,它會(huì)匹配一個(gè);

  • %n, 這里的 n 可以從 1 到 9; 這個(gè)條目匹配一個(gè)等于 n 號(hào)捕獲物(后面有描述)的子串。

  • %bxy, 這里的 xy 是兩個(gè)明確的字符; 這個(gè)條目匹配以 x 開(kāi)始 y 結(jié)束, 且其中 xy 保持 平衡 的字符串。 意思是,如果從左到右讀這個(gè)字符串,對(duì)每次讀到一個(gè)x+1 ,讀到一個(gè) y-1, 最終結(jié)束處的那個(gè) y 是第一個(gè)記數(shù)到 0 的 y。 舉個(gè)實(shí)例,條目 %b() 可以匹配到括號(hào)平衡的表達(dá)式。

  • %f[set], 指 邊境模式; 這個(gè)條目會(huì)匹配到一個(gè)位于 set 內(nèi)某個(gè)字符之前的一個(gè)空串, 且這個(gè)位置的前一個(gè)字符不屬于 set 。 集合 set 的含義如前面所述。 匹配出的那個(gè)空串之開(kāi)始和結(jié)束點(diǎn)的計(jì)算就看成該處有個(gè)字符 '\0' 一樣。

模式:

模式 指一個(gè)模式條目的序列。 在模式最前面加上符號(hào) '^' 將錨定從字符串的開(kāi)始處做匹配。 在模式最后面加上符號(hào) '$' 將使匹配過(guò)程錨定到字符串的結(jié)尾。 如果 '^' 和 '$' 出現(xiàn)在其它位置,它們均沒(méi)有特殊含義,只表示自身。

捕獲:

模式可以在內(nèi)部用小括號(hào)括起一個(gè)子模式; 這些子模式被稱(chēng)為 捕獲物。 當(dāng)匹配成功時(shí),由 捕獲物 匹配到的字符串中的子串被保存起來(lái)用于未來(lái)的用途。 捕獲物以它們左括號(hào)的次序來(lái)編號(hào)。 例如,對(duì)于模式 "(a*(.)%w(%s*))" , 字符串中匹配到 "a*(.)%w(%s*)" 的部分保存在第一個(gè)捕獲物中 (因此是編號(hào) 1 ); 由 "." 匹配到的字符是 2 號(hào)捕獲物, 匹配到 "%s*" 的那部分是 3 號(hào)。

作為一個(gè)特例,空的捕獲 () 將捕獲到當(dāng)前字符串的位置(它是一個(gè)數(shù)字)。 例如,如果將模式 "()aa()" 作用到字符串"flaaap" 上,將產(chǎn)生兩個(gè)捕獲物: 3 和 5 。