string.find(s, pattern [, init [, plain]])
功能:尋找s中首次出現pattern的位置,如果找到則回傳首次出現的起始和結束位置,否則
返回nil
說明:這個函數有四個參數可用:
s:母體。
pattern:目標字串。
init:搜尋起始位置(數字,可用負值)。可加可不加。
palin:搜尋模式(true|false),開關簡單匹配模式。可加可不加,預設為簡單匹
配模式。
範例:a = '你的身上(wealth)帶有 6667570 影特幣,銀行存款(balance)有 63908926 影
特幣。'
print (string.find(a,'影特幣'))
得到:30 35,第一個值是起始位置,第二個值是結束位置。只有抓到第一個'影特幣
。如果要抓全部可以增加第三個參數,用迴圈執行:
for i = 1,10 do
i,j = string.find(a,'%d+ ',-j)
print(i,j)
if i == nil then break end
end
基本上,這個應該是用while...do...end 或repeat...until,不過,這對初學者而
言(就是我),太危險了,不如用能控制次數的for...end安全。先設一個差不多的
次數,這裡是設10次,不管寫對還是寫錯,10就會結束,至少不會死當。把起始值
傳給i,結束值傳給j,再把j設到string.find的第三個參數,下次就會從上次的結束
尋找位置開始找。這次就不管一樣的,改找數字,搜尋條件可以使用也表達式,不過
轉義字元不是'\',而是'%'。為了不做白工,所以加個判斷,找完之後就自行跳出迴
圈。結果如下:
第一組數字起始位置:22,結束位置:29。
第二組數字起始位置:58,結束位置:66。
"nil nil"代表己經找到最後了。
在網路上找到使用 while 迴圈的寫法:
local t = {} -- 紀錄換行字元所在位置
local i = 0
while true do
i = string.find(s, "\n", i+1) -- 找下一行
if i == nil then break end
table.insert(t, i)
end