Lua字串庫(string庫)學習筆記_Lua

來源:互聯網
上載者:User

Lua 最強大的特性之一就是它的字串處理能力,它支援字元格式設定化輸出,具有可擴充的模式比對尋找功能,以及一些實用的字元操作,例如查詢、截取、替換和刪除等字串操作,這些字串操作函數都封裝在一個名為 string 的模組裡。

Lua 裡的字元索引是從 1 開始,索引值也可以是負數,這種情況將被解釋成向後索引,從字串末尾開始算起。

下面是 Lua 5.2 提供的字串操作函數:

byte

函數 string.byte 把字串裡的第 i 個字元轉為 ASCII 編碼,預設是輸出第一個字元的編碼(只有一個參數的話),用法:

複製代碼 代碼如下:

string.byte (s [, i [, j]])

例子:

複製代碼 代碼如下:

print(string.byte("abc")) //echo:97

print(string.byte("abc", 2))//echo:98

char

函數 string.char 是把一個 ASCII 編碼轉換為對應的字元,用法:

複製代碼 代碼如下:

string.char (asc1, ...)

例子:

複製代碼 代碼如下:

print(string.char(97)) //echo a

print(string.char(99, 100, 101)) //echo cde

dump

函數 string.dump 返回一個函數二進位形式的字串,用法:

複製代碼 代碼如下:

string.dump (function)

參數 function 是一個 Lua 函數:

複製代碼 代碼如下:

function test()
    print("just a test")
end
print(string.dump(test))

函數 string.dump 實現了函數的序列化,函數可以很輕鬆的傳遞,並在其他範圍調用。函數 string.dump 出來的二進位字串,可以用 load 函數反序列回來直接調用。

複製代碼 代碼如下:

function test()
    print("just a test")
end
local sd = string.dump(test)
print(sd)
local ls = load(sd)
print(ls)
ls()

find

函數 string.find 尋找字串 s 裡第一個符合尋找字元 pattern 的位置,用法:

複製代碼 代碼如下:

string.find (s, pattern [, init [, plain]])

如果找到了目標字元 pattern,則返回它的開始和結束位置:

複製代碼 代碼如下:

start, end = string.find("just a test", "st")
print(start, end)

如果沒有找到,則返回 nil:

複製代碼 代碼如下:

print(string.find("just a test", "dhq.me"))

format

函數 string.format 用於把字串格式化輸出,用法:

複製代碼 代碼如下:

string.format (formatstring, ···)

string.format 函數的第一個參數是用來指定字串的格式,例如:

複製代碼 代碼如下:

print(string.format("%s is %d", "ten", 10))

上面例子裡的 %s 表示字串,%d 表示數字,它們是 Lua 的格式化輸出符號。

string.format 函數的用法跟 C 語言裡的 printf 函數類似,例如它可以像 printf 那樣輸出指定位元的數字:

複製代碼 代碼如下:

Pi = 3.1415926
print(string.format("Pi is %.2f", Pi))

Lua 的字元格式設定化輸出符號列表:

複製代碼 代碼如下:

.           所有字元
%a          字母
%c          控制符
%d          數字
%D          非數字
%l          小寫字母
%p          標點符號
%s          字串
%u          大寫字母
%w          字母數字
%x          十六進位數
%z          用 0 表示的字元

gmatch

函數 string.gmatch 會返回一個迭代函數,尅通過該函數遍曆到一個字串 s 中所有出現指定匹配模式 pattern 的地方,用法:

複製代碼 代碼如下:

string.gmatch (s, pattern)

例如下面是找出字串 s 裡的所有單詞:

複製代碼 代碼如下:

s = "just a test"
for w in string.gmatch(s, "%a+") do
    print(w)
end

gsub

函數 string.gsub 用於全域字串替換,字串 s 裡滿足匹配模式 pattern 格式的字元都會被替換成 repl 參數的值,用法:

複製代碼 代碼如下:

string.gsub (s, pattern, repl [, n])

例如:

複製代碼 代碼如下:

print(string.gsub("just a test", "st", "*"))

匹配模式 pattern 可以是一個正則:

複製代碼 代碼如下:

s = "num is 1234567890"
print(string.gsub(s, "%d", "*"))

可在函數的最後加上一個選擇性參數 n,表示指定要替換的次數:

複製代碼 代碼如下:

s = "sethook, setlocal, setmetatable, setupvalue, setuservalue"
print(string.gsub(s, "s%a+", "S", 2))

len

函數 string.len 用於返回字串 s 的長度,用法:

複製代碼 代碼如下:

string.len (s)

例子:

複製代碼 代碼如下:

print(string.len("abcdefg"))

lower

函數 string.lower 用於把字串 s 裡的字母轉為小寫,用法:

複製代碼 代碼如下:

string.lower (s)

例如:

複製代碼 代碼如下:

print(string.lower("AbCdEfG"))

match

函數 string.match 用於尋找字串 s 裡第一個匹配對模式 pattern 的值,並返回匹配值,用法:

複製代碼 代碼如下:

string.match (s, pattern [, init])

上面參數 init 是可選, 表示尋找過程的起點, 預設從 1 開始:

複製代碼 代碼如下:

print(string.match("just a test", "test"))

參數 patter 可以是一個正則模式:

複製代碼 代碼如下:

t = "today is 2003-5-31"
print(string.match(t, "%d+-%d+-%d+"))

如果 pattern 為空白,則返回整個字串;如果沒匹配成功,則返回 nil。

複製代碼 代碼如下:

print(string.match("abcdabcd", "a"))

rep

函數 string.rep 返回一個由分隔字元 sep 隔開的重複(repeat)n 次字元 s 的字串,用法:

複製代碼 代碼如下:

string.rep (s, n [, sep])

預設的分隔字元 sep 是Null 字元。

複製代碼 代碼如下:

print(string.rep("repeat", 3))

reverse

函數 string.reverse 用於倒轉一個字串 s 的排序,用法:

複製代碼 代碼如下:

string.reverse (s)

例如:

複製代碼 代碼如下:

print(string.reverse("reverse"))

sub

函數 string.sub 用於從字串 s 裡截取一個從第 i 個字元到第 j 個字元間的子字串,用法:

複製代碼 代碼如下:

string.sub (s, i [, j])

例如:

複製代碼 代碼如下:

print(string.sub("abcdefg", 2, 5))

參數 i 可以是負數,這種情況下,子串的位置從字串 s 的最後開始算起:

複製代碼 代碼如下:

print(string.sub("abcdefg", -4, -2))

參數 end 省略的話,則會返回從 i 到字串末尾的子字串:

複製代碼 代碼如下:

print(string.sub("abcdefg", 3))

upper

函數 string.upper 用於把字串 s 裡的字母轉為大寫,用法:

複製代碼 代碼如下:

string.upper (s)

例如:

複製代碼 代碼如下:

print(string.upper("AbCdEfG"))

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.