亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Lua教程(十四):字符串庫詳解

2024-07-21 23:04:45
字體:
來源:轉載
供稿:網友

1. 基礎字符串函數:

    字符串庫中有一些函數非常簡單,如:

    1). string.len(s) 返回字符串s的長度;
    2). string.rep(s,n) 返回字符串s重復n次的結果;
    3). string.lower(s) 返回s的副本,其中所有的大寫都被轉換為了小寫形式,其他字符不變;
    4). string.upper(s) 和lower相反,將小寫轉換為大寫;
    5). string.sub(s,i,j) 提取字符串s的第i個到第j個字符。Lua中,第一個字符的索引值為1,最后一個為-1,以此類推,如:
    print(string.sub("[hello world]",2,-2))      --輸出hello world
    6). string.format(s,...) 返回格式化后的字符串,其格式化規則等同于C語言中printf函數,如:
    print(string.format("pi = %.4f",math.pi)) --輸出pi = 3.1416
    7). string.char(...) 參數為0到多個整數,并將每個整數轉換為對應的字符。然后返回一個由這些字符連接而成的字符串,如:
    print(string.char(97,98,99)) --輸出abc
    8). string.byte(s,i) 返回字符串s的第i個字符的Ascii值,如果沒有第二個參數,缺省返回第一個字符的Ascii值。
 

復制代碼 代碼如下:

    print(string.byte("abc"))      --輸出97
    print(string.byte("abc",-1))  --輸出99
 

    由于字符串類型的變量都是不可變類型的變量,因此在所有和string相關的函數中,都無法改變參數中的字符串值,而是生成一個新值返回。

 

    2. 模式匹配函數:

    Lua的字符串庫提供了一組強大的模式匹配函數,如find、match、gsub和gmatch。

    1). string.find函數:
    在目標字符串中搜索一個模式,如果找到,則返回匹配的起始索引和結束索引,否則返回nil。如:

復制代碼 代碼如下:

 s = "hello world"
 i, j = string.find(s,"hello") 
 print(i, j)        --輸出1  5
 i, j = string.find(s,"l")
 print(i, j)        --輸出3  3
 print(string.find(s,"lll"))  --輸出nil

 

    string.find函數還有一個可選參數,它是一個索引,用于告訴函數從目標字符串的哪個位置開始搜索。主要用于搜索目標字符串中所有匹配的子字符串,且每次搜索都從上一次找到的位置開始。如:

 

復制代碼 代碼如下:

local t = {}
local i = 0
while true do
    i = string.find(s,"/n",i+1)
    if i == nil then
        break
    end
    t[#t + 1] = i
end

 

2). string.match函數:

    該函數返回目標字符串中和模式字符串匹配的部分。如:

復制代碼 代碼如下:

 date = "Today is 2012-01-01"
 d = string.match(date,"%d+/-%d+/-%d+")
 print(d)  --輸出2012-01-01

    3). string.gsub函數:

 

    該函數有3個參數,目標字符串、模式和替換字符串?;居梅ㄊ菍⒛繕俗址兴谐霈F模式的地方替換為替換字符串。如:
 

復制代碼 代碼如下:

    print(string.gsub("Lua is cute","cute","great"))  --輸出Lua is great
 

    該函數還有可選的第4個參數,即實際替換的次數。
 
復制代碼 代碼如下:

    print(string.gsub("all lii","l","x",1))  --輸出axl lii
    print(string.gsub("all lii","l","x",2))  --輸出axx lii
 

    函數string.gsub還有另一個結果,即實際替換的次數。
    count = select(2, string.gsub(str," "," "))  --輸出str中空格的數量

 

    4). string.gmatch函數:

    返回一個函數,通過這個返回的函數可以遍歷到一個字符串中所有出現指定模式的地方。如:
 

復制代碼 代碼如下:

 words = {}
s = "hello world"
for w in string.gmatch(s,"%a+") do
    print(w)
    words[#words + 1] = w
end
--輸出結果為:
--hello
--world
 

 

  3. 模式:

    下面的列表給出了Lua目前支持的模式元字符;

Lua,教程,字符串庫

  這些元字符的大寫形式表示它們的補集,如%A,表示所有非字母字符。
 

復制代碼 代碼如下:

    print(string.gsub("hello, up-down!","%S","."))   --輸出hello..up.down. 4
 

    上例中的4表示替換的次數。
    除了上述元字符之外,Lua還提供了另外幾個關鍵字符。如:( ) . % + - * ? [ ] ^ $
    其中%表示轉義字符,如%.表示點(.),%%表示百分號(%)。
    方括號[]表示將不同的字符分類,即可創建出屬于自己的字符分類,如[%w_]表示匹配字符、數字和下劃線。

 

    橫線(-)表示連接一個范圍,比如[0-9A-Z]

    如果^字符在方括號內,如[^/n],表示除/n之外的所有字符,即表示方括號中的分類的補集。如果^不在方括號內,則表示以后面的字符開頭,$和它正好相反,表示以前面的字符結束。如:^Hello%d$,匹配的字符串可能為Hello1、Hello2等。

    在Lua中還提供了4種用來修飾模式中的重復部分,如:+(重復1次或多次)、*(重復0次或多次)、-(重復0次或多次)和?(出現0或1次)。如:
 

復制代碼 代碼如下:

    print(string.gsub("one, and two; and three","%a+","word")) --輸出word, word word; word word
    print(string.match("the number 1298 is even","%d+")) --輸出1298
 

    星號(*)和橫線(-)的主要差別是,星號總是試圖匹配更多的字符,而橫線則總是試圖匹配最少的字符。

 

    4. 捕獲(capture):

    捕獲功能可根據一個模式從目標字符串中抽出匹配于該模式的內容。在指定捕獲是,應將模式中需要捕獲的部分寫到一對圓括號內。對于具有捕獲的模式,函數string.match會將所有捕獲到的值作為單獨的結果返回。即它會將目標字符串切成多個捕獲到的部分。如:
 

復制代碼 代碼如下:

 pair = "name = Anna"
key,value = string.match(pair,"(%a+)%s*=%s*(%a+)")
print(key,value)  --輸出name anna

 

date = "Today is 2012-01-02"
y,m,d = string.match(date,"(%d+)/-(%d+)/-(%d+)")
print(y,m,d)      --輸出2012    01      02
 

 

還可以對模式本身使用捕獲。即%1表示第一個捕獲,以此類推,%0表示整個匹配,如:

復制代碼 代碼如下:

 print(string.gsub("hello Lua","(.)(.)","%2%1"))  --將相鄰的兩個字符對調,輸出為ehll ouLa
 print(string.gsub("hello Lua!","%a","%0-%0"))    --輸出為h-he-el-ll-lo-o L-Lu-ua-a!

 

  5. 替換:

    string.gsub函數的第三個參數不僅可以是字符串,也可以是函數或table,如果是函數,string.gsub會在每次找到匹配時調用該函數,調用時的參數就是捕獲到的內容,而該函數的返回值則作為要替換的字符串。當用一個table來調用時,string.gsub會用每次捕獲到的內容作為key,在table中查找,并將對應的value作為要替換的字符串。如果table中不包含這個key,那么string.gsub不改變這個匹配。如:

復制代碼 代碼如下:

function expand(s)
    return (string.gsub(s,"$(%w+)",_G))
end

 

name = "Lua"; status = "great"
print(expand("$name is $status, isn't it?"))  --輸出 Lua is great, isn't it?
print(expand("$othername is $status, isn't it?"))  --輸出 $othername is great, isn't it?

function expand2(s)
    return (string.gsub(s,"$(%w+)",function(n) return tostring(_G[n]) end))
end

print(expand2("print = $print; a = $a")) --輸出 print = function: 002B77C0; a = nil


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人在线视频| 亚洲精品国产精品国自产观看浪潮| 欧洲午夜精品久久久| 久久久免费电影| 亚洲精品国精品久久99热一| 国产亚洲精品成人av久久ww| 中文字幕国产日韩| 欧美一区亚洲一区| 欧美国产极速在线| 亚洲国产精品美女| 国产精彩精品视频| 麻豆精品精华液| 国产精品va在线| 亚洲欧美日本伦理| 国产欧美一区二区三区视频| 456亚洲影院| 中文字幕欧美视频在线| 91免费精品国偷自产在线| 亚洲精品97久久| 成人夜晚看av| 亚洲欧洲视频在线| 亚洲天堂影视av| 国产成人在线亚洲欧美| 91夜夜揉人人捏人人添红杏| 亚洲国产成人精品电影| 日韩av一区在线| 色无极影院亚洲| 日韩精品在线观看网站| 亚洲电影中文字幕| 中文字幕精品视频| 国产一区二区在线免费视频| 欧美日韩国产一区在线| 狠狠做深爱婷婷久久综合一区| 欧美性极品少妇精品网站| 久久久中精品2020中文| 亚洲精品福利资源站| 久久久久久久久久久91| www高清在线视频日韩欧美| 欧美激情精品在线| 国产精品va在线| 国产精品久久久久久亚洲影视| 亚洲国产精品人久久电影| 日韩欧美精品免费在线| 欧美裸体xxxx极品少妇软件| 欧美午夜精品伦理| 亚洲色图50p| 国产99久久精品一区二区| 美女999久久久精品视频| 欧美日韩高清区| 亚洲欧美精品在线| 亚洲精品按摩视频| 亚洲欧美中文日韩在线v日本| 中文国产成人精品久久一| 精品久久中文字幕| 欧美性生活大片免费观看网址| 久久不射热爱视频精品| 亚洲激情视频网| 欧美黄色性视频| 国产性色av一区二区| 久久久精品国产一区二区| 亚洲欧美日韩天堂一区二区| 欧美国产激情18| 在线成人中文字幕| 久久影视免费观看| 久久国产精品网站| 欧美日本国产在线| 亚洲精品97久久| 色综合色综合久久综合频道88| 日韩精品极品在线观看播放免费视频| 国产成人欧美在线观看| 亚洲一区二区自拍| 国产午夜精品全部视频在线播放| 在线观看亚洲区| 欧美激情在线一区| 中文字幕亚洲精品| 久久精品国产一区二区三区| 91经典在线视频| 欧美日韩亚洲国产一区| 欧美性色19p| 久久精品国产亚洲一区二区| 亚洲精品日韩丝袜精品| 亚洲精品中文字幕女同| 亚洲成**性毛茸茸| 久久九九国产精品怡红院| 蜜臀久久99精品久久久久久宅男| 性欧美长视频免费观看不卡| 亚洲天堂第一页| 成人动漫网站在线观看| 欧美激情奇米色| 亚洲天堂开心观看| 成人h视频在线观看播放| 欧美与黑人午夜性猛交久久久| 欧美国产精品va在线观看| 欧美激情亚洲另类| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产丝袜一区二区三区免费视频| 国产乱人伦真实精品视频| 国产精品在线看| 日韩视频在线免费观看| 成人久久18免费网站图片| 97在线精品视频| 在线播放国产一区中文字幕剧情欧美| 国产精品久久久久久久午夜| 日韩欧美在线国产| 亚洲免费影视第一页| 欧洲美女免费图片一区| 亚洲精品日韩欧美| 久久精品国产综合| 欧美高清无遮挡| 国产91精品久久久久久久| 国产日韩av在线播放| 91网站在线看| 日韩免费在线电影| 国产亚洲精品日韩| 久久99久久99精品免观看粉嫩| 黑人狂躁日本妞一区二区三区| 69**夜色精品国产69乱| 欧美激情欧美狂野欧美精品| 久久人体大胆视频| 久久精品电影一区二区| 精品性高朝久久久久久久| 最新91在线视频| 久久成年人免费电影| 久久精品国产96久久久香蕉| 亚洲欧美www| 久久精品国产亚洲7777| 一本色道久久综合狠狠躁篇怎么玩| 久久精品小视频| 3344国产精品免费看| 欧美影院久久久| 亚洲成人在线视频播放| 久色乳综合思思在线视频| 免费99精品国产自在在线| 粉嫩老牛aⅴ一区二区三区| 亚洲视频电影图片偷拍一区| 国产精品日韩欧美综合| 国内精品久久久久久影视8| 中文字幕亚洲一区二区三区五十路| 亚洲激情视频网| 91社影院在线观看| 日韩在线中文字幕| 亚洲第一精品夜夜躁人人躁| 国产美女久久久| 亚洲精品美女在线观看播放| 久久久久一本一区二区青青蜜月| 性金发美女69hd大尺寸| 久久国产精品影视| 日韩av免费看网站| 国产精品一香蕉国产线看观看| 欧美日韩xxx| 久久天天躁夜夜躁狠狠躁2022| 亚洲欧美另类国产| 欧美亚洲日本网站| 伊人青青综合网站| 国产91精品青草社区| 国产香蕉一区二区三区在线视频| 亚洲色图狂野欧美| 亚洲大胆人体视频| 成人亚洲激情网| 国产精品久久久久久久久久久久| 欧美在线视频导航| 91av网站在线播放| 国产精品成人aaaaa网站| 中文字幕欧美精品日韩中文字幕|