string.len( 『string』 )
string.lower( 『string』 )
string.upper( 『string』 )
string.rep( 『a』 , 5 ) ==> aaaaa
string.sub( 『string』 , i , j )
string.sub( s, string.find(s, 'world') )
string.sub函式會提取子串by子串所在字串的位置下標
string.char() string.byte()
string.format( 『%02d:%02d:%02d』 , d , m , y )
字串=>被查詢的字串
子串=>要查詢的字元(串)
string.find( 'string', 'substr' ) 返回 子串的前後位置
string.find( 'string', 'c' ) 返回相同位置
string.find( s, 'substr', index ) 該函式的第三個引數是開始查詢下標
由此,find函式簡單查詢子串(包含字元) 返回值是2個值;沒有找到,即返回nil。
string.match()函式返回匹配到的子串的乙份copy。
string.match( 'string' , '%d+/%d+%d+') -->12/23/34
string.gsub( 'lua is cute', 'cute', 'great' ) -->lua is great
用第三個引數替換第乙個引數中所有出現的第二個引數,並返回整串以及發生的實際替換次數。
string.gsub( 'all lla' , 'l' , 'x' , 3 ) -->axx xla 第四個引數限制替換的次數
string.gmatch(s, '%a') 將返回乙個函式,遍歷到所有的模式指定子串by返回的函式。
words = {}
for w in string.gmatch( s, "%a+" ) do
words[#words+1] = w
end
總結一下:各模式匹配函式的基本簡單功能`find( 'string' , 'strsub' , index )` 從起始位置(index)查詢子串返回位置
`match( 'string' , '%s%d.....' )` 匹配捕獲,返回子串的copy
`gmatch( 'string', '%s%d' )` 全域性匹配捕獲,返回乙個函式提供所有子串
`gsub( 'string' , 'go' , 'come' , count)` 替換字串中所有go子串換count次
其實,差不多是根據函式返回值不同,則大約功能相差,引數排布相似,並且都是遍歷查詢功能。那麼上面大致的三類就涵蓋了模式匹配3個大的功能方面:查詢,捕獲,替換。
模式就是一種字串,模式函式會解釋它們,它們就有了意義
字元分類:(字元,即乙個)分類字元們的大寫表示相對補集
%d(數字) %a(字母) %c(控制字元) %l(小寫字母)
%p(標點) %s(空白字元) %u(大寫字母)
%w( a | d ) %x(十六進製制數字)
特殊字元們: ( ) . % + - * ? [ ] ^ $
普通字串,用來轉義: 『\n』
模式函式解釋模式串: 模式中的 特殊字元們需要使用原字元意義用%轉義。
但是,嘗試了一下這種情況:string.find( s , 『^[+-]?%d+$』 )
依然能夠匹配出字串前面的+-號,當然string.find( s,『[%+%-]?%d+』)
也能夠匹配出結果。所以,建議使用後者,含義比較清晰。
字符集: [%w_] [aeiouaeiou] [0-9a-fa-f] [^\n] [^%s] %s
描述模式的重複和可選:
+ 重複1次以上
*- 重複隨便幾次
? 0次,1次
函式string.match
會將所有捕獲到的值返回
date = 「today is 12/12/2012」
d , m , y = string.match( date, 「(%d+)/(%d+)/(%d+)」)
%d 用來匹配與前面第d個捕獲相同內容,不僅是字元個數相同。
q,quotedpart = string.match( s , 「([\」』])(.-)%1」) %1的地方必須要與前面([\」』])相同的內容來填補%1此位置。
s = string.gsub(s , 「\\(%a+)」 , 「<%1><%2><\%1>」 )
%d此佔位捕獲前面位置內容的項,也可以用在替換函式中。
function trim ( s )
return ( string.gsub( s , 「^%s*(.-)%s*$」 , 「%1」 ) )
end
string.gsub
函式的第三個引數不僅是替換的字串,還可以是乙個table , 或者是乙個函式。
table: gsub
每次找到匹配字串時,以此字串作為key,用table中對應的value來替換,沒有對應value,不替換。
string.gsub( s , 「$(%w+)」 , _g )
_g是全域性變數的table
函式:gsub
每次找到匹配字串時,呼叫該函式並將匹配字串作為引數傳入。
string.gsub( s , 「$(%w+)」 , function(n)
return tostring( _g[n] )
end )
舉例
將login_string長字串中內容讀取到乙個table中,去除前面無意義字首
login_string = "lgn|puserid=4542379,svrid=qxzh0001,fcm=0,timestamp=1381311260,idc=u,origin=,c=0,sign=0d0cc04dd64b4c2e2d9d8102834b45d6"
--長字串中前5個字元去掉
kvtable =
login_string_std = string.sub(login_string , 6) -- lua中索引從1開始
--因為長字串中有字段的內容為空'origin',模式中第二個選用*
for k,v in string.gmatch(login_string_std , "(%a+)=(%w*)") do
kvtable[k] = v
end
在遍歷table
的時候的區別:
首先,說明一下,陣列table(array)
就是 key 為連續數字的table.
那麼,簡而言之,ipairs
是遍歷陣列的;pairs
是遍歷記錄table(k,v)的
用pairs
來遍歷table(k,v),將會逐個讀取出來,而遍歷table(array)也會全部讀取出來。用
ipairs
來遍歷table(k,v),將會停止在第乙個非數字key的地方或者停止在得到的value是nil的地方,而遍歷table(array)就順利全部遍歷出來了,返回0。最後,使用
ipairs
比較嚴格,使用pairs
比較寬鬆。
Lua學習之字串函式及模式匹配
對於簡單的函式,我只是將其以舉例的方式羅列一下,對於一些功能較多的函式,會舉例分析一下,並簡單總結,全文以舉例為驅動。一,字元類基礎函式舉例介紹 string.len string string.lower string string.upper string string.rep a 5 aaaa...
Lua 筆記 Lua 字串
目錄 lua 字串 字串操作 字串擷取 字串大小寫轉換 字串查詢與反轉 字串格式化 字元與整數相互轉換 案例 string1 lua print 字串 1 是 string1 string2 runoob.com print 字串 2 是 string2 string3 lua 教程 print 字...
lua學習筆記 字串操作
1.定義 雙引號 單引號 和字串組 2.轉義字元 注意這裡是 不是 n換行 輸出 輸出 就寫幾個常用的,別的暫時就不詳細寫了 3.字串操作 reverse 這個方法的。不過有list.reverse 網上反轉的方法也有很多,這裡寫乙個不用reverse的。同時分享乙個字串反轉的坑。就是對字串操作時,...