對於簡單的函式,我只是將其以舉例的方式羅列一下,對於一些功能較多的函式,會舉例分析一下,並簡單總結,全文以舉例為驅動。
一,字元類基礎函式舉例介紹:
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 )
二,模式匹配(pattern-matching)
函式舉例介紹
:字串
=>
被查詢的字串;子串
=>
要查詢的字元(串
):string.find( 'string', 'substr' ) 返回 子串的前後位置
string.find( 'string', 'c' ) 返回相同位置
由此,find
函式簡單查詢子串
(包含字元
) 返回值是
2個值;沒有找到,即返回
nil。
string.find( s, 'substr', index ) 該函式的第三個引數是開始查詢下標
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
function: gsub
每次找到匹配字串時,呼叫該函式並將匹配字串作為引數傳入。
string.gsub( s ,
「$(%w+)
」, function(n)
return tostring( _g[n] )
end )
乙個小的**演示:
local login_string = "abcdeaaaaaa=4543578,sssss=qx564201,fcm=0,timestamp=1381311260,idc=u,origin=,c=0,sign=0d0cc04dd64b4c2e2d9d8102834b45d6"
local kvtable = --定義乙個用來儲存上面字串的k,v的table.
local login_string_std = string.sub(login_string , 6) --取得aaa.....開始的後面全部字串
for k,v in string.gmatch(login_string_std , "(%a+)=(%w*)") do --注意到了嗎origin木有值
end 六,url
編碼 tab
擴充套件 以及一些技巧
隨後,若有時間,再總結。。。
************pairs 與
ipairs***************
在遍歷table
的時候的區別:
首先,說明一下,陣列table(array)
就是key
為連續數字的
table.
那麼,簡而言之,ipairs
是遍歷陣列的;
pairs
是遍歷table(k,v)
的所以用pairs
來遍歷table(k,v),
將會逐個遍歷出來,而遍歷
table(array)
也會全部遍歷出來,最後返回
nil。。。用
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 aaaaa string.sub string i j string.sub s,string.find s,world string.sub函式會提取子...
Lua的字串分割函式
lua中的字串函式 函式功能 string.len s 返回字串s的長度 string.rep s,n 返回重複n次字串s的串 你使用string.rep a 2 20 可以建立乙個1m bytes的字串 string.lower s 將s中的大寫字母轉換成小寫 string.upper s 將s中...
awk模式之正則及常用的字串函式
awk的內建字串函式 1.格式化輸出print和printf 和c語言風格一致,表示左對齊,預設是右對齊 s字元型,d十進位制數值型,f浮點型 root mysql master awk f tmp file1 username root uid 0 username bin uid 1 usern...