国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發(fā) > 綜合 > 正文

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

2024-07-21 23:04:45
字體:
供稿:網(wǎng)友

1. 基礎(chǔ)字符串函數(shù):

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

    1). string.len(s) 返回字符串s的長度;
    2). string.rep(s,n) 返回字符串s重復(fù)n次的結(jié)果;
    3). string.lower(s) 返回s的副本,其中所有的大寫都被轉(zhuǎn)換為了小寫形式,其他字符不變;
    4). string.upper(s) 和lower相反,將小寫轉(zhuǎn)換為大寫;
    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,...) 返回格式化后的字符串,其格式化規(guī)則等同于C語言中printf函數(shù),如:
    print(string.format("pi = %.4f",math.pi)) --輸出pi = 3.1416
    7). string.char(...) 參數(shù)為0到多個整數(shù),并將每個整數(shù)轉(zhuǎn)換為對應(yīng)的字符。然后返回一個由這些字符連接而成的字符串,如:
    print(string.char(97,98,99)) --輸出abc
    8). string.byte(s,i) 返回字符串s的第i個字符的Ascii值,如果沒有第二個參數(shù),缺省返回第一個字符的Ascii值。
 

復(fù)制代碼 代碼如下:

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

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

 

    2. 模式匹配函數(shù):

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

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

復(fù)制代碼 代碼如下:

 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函數(shù)還有一個可選參數(shù),它是一個索引,用于告訴函數(shù)從目標字符串的哪個位置開始搜索。主要用于搜索目標字符串中所有匹配的子字符串,且每次搜索都從上一次找到的位置開始。如:

 

復(fù)制代碼 代碼如下:

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函數(shù):

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

復(fù)制代碼 代碼如下:

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

    3). string.gsub函數(shù):

 

    該函數(shù)有3個參數(shù),目標字符串、模式和替換字符串。基本用法是將目標字符串中所有出現(xiàn)模式的地方替換為替換字符串。如:
 

復(fù)制代碼 代碼如下:

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

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

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

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

 

    4). string.gmatch函數(shù):

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

復(fù)制代碼 代碼如下:

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

 

  3. 模式:

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

Lua,教程,字符串庫

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

復(fù)制代碼 代碼如下:

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

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

 

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

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

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

復(fù)制代碼 代碼如下:

    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):

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

復(fù)制代碼 代碼如下:

 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表示整個匹配,如:

復(fù)制代碼 代碼如下:

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

 

  5. 替換:

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

復(fù)制代碼 代碼如下:

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产福利免费观看| 黄色毛片在线看| 午夜视频99| 欧美日韩一区二区三区视视频| 99爱视频在线观看| 日本在线视频www鲁啊鲁| 日本电影在线观看| 高清在线观看av| 超碰在线影院| 青青草原国产在线观看| 天天插天天狠天天透| 九九热视频在线| a视频免费看| 另类综合图区| 国产黄a三级三级三级av在线看| 国产精品视频一区二区免费不卡| 国产剧情在线一区| 亚洲精品在线播放视频| 福利视频在线看| 国产日本在线| 国产经典自拍视频在线观看 | 牛牛精品视频在线| 国产麻豆综合视频在线观看| 一级二级在线观看| 天天操天天操一操| 全网国产福利在线播放| 自拍亚洲国产| 免费看黄视频网站| 久久亚洲国产成人亚| a级在线观看| 中文字幕在线观看日本| 国产高潮av| 狠狠干天天干| 亚洲精品xxxxx| 国产精品免费91| 久久五月精品| 国产黄色在线看| 在线国产一区二区三区| 九九热在线视频| 欧美精品一区二区三区免费| 日本在线天堂| 亚洲sss视频| 亚洲sss视频| 精品国内一区二区三区免费视频| av网站在线播放| 国产亚洲精品久久久久久青梅| 国产精品久久久久白浆| 国产99re| 日本电影全部在线观看网站视频| 亚洲精品手机在线| 免费视频中文字幕| 麻豆网站在线| 白浆爆出在线观看| 国产精品伦一区二区三区级视频频 | 欧美xxxx黑人又粗又长| 精精国产xxxx视频在线中文版| 久久久久久久美女| 丁香视频五月| 五月婷婷导航| 尤物网址在线观看| 九九热在线视频| 中文字幕在线永久在线视频| 国产精彩视频在线观看免费蜜芽| 国产一区二区三区不卡免费观看| 国产亚洲精品久久久久久青梅| 国产成在线观看免费视频| 一本免费视频| 午夜av在线播放| 欧美日韩视频精品一区二区| 国产一二区在线| 国产aⅴ超薄肉色丝袜交足| 亚洲免费网站在线观看| 中中文字幕av在线| 精品成人免费自拍视频| 国产精品久久人| 中文字幕av在线| 精品免费视频一卡2卡三卡4卡不卡| 精品51国产黑色丝袜高跟鞋| 国产在线高清理伦片a| 伊人资源视频在线| 国产精品视频一区二区久久 | 91最新在线| 国产国产国产国产国产国产| 国产视频三区| 天天av天天爽| www在线视频| 91视频黄色| 国产一级黄色| 免费看ww视频网站入口| 国产国语**毛片高清视频| 99久久精品免费观看国产| 国产九色视频| 国产一级二级在线| 激情亚洲综合网| xxxxx中文字幕| 在线中文av| 最近中文字幕mv免费高清在线| 国产成人亚洲综合小说区| 国产盗摄精品一区二区酒店| 黄色毛片在线看| 精品剧情v国产在线观看| 在线一区观看| 伊人影院在线视频| 国产成人亚洲精品播放器下载| free性亚洲| 青青国产在线| 日本福利午夜视频在线| 免费日本黄色| 久久精品亚洲7777影院| 成人欧美日韩| 最新国产在线精品91尤物| av网站大全在线观看| 国产经典av| jizz在线免费观看| 国产自产视频| 尤物在线视频| 精品卡一卡卡2卡3网站| av片在线观看| 国产偷激情在线| 国产区高清在线| 国产麻豆精品视频一区二区| 国产网站免费观看| 在线观看的网站你懂的| 日本成人网址| 国产美女在线观看| 九九热在线视频| 国产高清一级片| av片在线观看| 国产麻豆精品视频一区二区 | 国产午夜精品一区理论片| 国产精品偷乱一区二区三区| 日本三级在线视频| 免费99热在线观看| 伊人222成人综合网| 午夜视频在线免费| av在线不卡免费| 国产香蕉在线| 午夜影院在线| www.毛片| 日本成人免费网站| 69视频在线观看| 久久精品最新免费国产成人| 中文资源在线网| 黄色国产在线| 91激情在线| 国产麻豆麻豆| 日本国产在线| 91桃色在线| 最近中文av字幕在线中文| 日本aⅴ写真网站免费| av网站大全在线观看| 国产在线www| 不卡av免费观看| 亚洲图区综合| 在线免费观看你懂的| 国产黄色免费网站| 国产亚洲精品自在线观看| 九九热免费在线视频| 日本片在线看| 最好看更新中文字幕| 黄色一级视频网站| 国产男女av| 亚洲人成影院在线| 国产精品自产拍在线网站| 国产免费网址| 国产网站麻豆精品视频| 福利在线国产| 中文字幕av高清在线观看| 99在线欧洲视频| gogo在线高清视频| 任你操视频在线观看| www.蜜桃av| 国产农村一级特黄α**毛片 | 高清av中文在线字幕观看1| 国产一二在线观看| 日本啊v在线| 国产毛片视频| 国产三级做爰在线观看| 精品久久av| 欧美性猛交xxxx免费看久久| 国产在线高潮| 四虎成人免费| 99热在线观看免费| 中文乱码字幕高清在线观看| 亚洲欧美小说国产图片| jizz在线视频| 中文在线官网天堂| 国产尤物视频| 国产成人夜间影院在线观看| 国产羞羞视频在线播放| 在线观看中文字幕一区| 丁香综合在线| 午夜羞羞小视频在线观看| 欧美日韩亚洲国内综合网| 国产三线在线| 国产精品免费视频一区一| 在线免费国产视频| 天堂网中文在线| ·天天天天操| 天天操天天艹|