亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Lua字符串庫中的幾個重點函數介紹

2024-07-21 23:04:13
字體:
來源:轉載
供稿:網友

在《Lua中的一些庫》中也說到了,要對string庫的模式匹配進行單獨的講解。對于字符串的處理,對于任何語言的學習來說,都是一個難點,而且也是一個必會的知識點。給你一個字符串,讓你按照某種需求進行處理,你不會,那是多么尷尬的一件事情。所以,看完《Lua中的一些庫》和這篇文章之后,我爭取做到讓你在處理字符串時,不再感到捉襟見肘,不再尷尬。

說到Lua中的模式匹配,基本上就是圍繞著以下幾個函數展開的:

1.find;
2.match;
3.gsub;
4.gmatch。

我的總結也就是圍繞著上面的四個函數展開的。請容我慢慢道來。

簡單實用的find

string.find()函數用于在一個給定的目標字符串中搜索一個模式。最簡單的模式就是一個單詞,它只會匹配與自己完全相同的拷貝。當find找到一個模式后,它會返回兩個值:匹配到的起始索引和結尾索引;如果沒有找到任何匹配,它就返回nil。示例代碼:

 

復制代碼 代碼如下:

local str = "Hello World"
local i, j = string.find(str, "Hello") -- 返回Hello在str中的起始位置和終止位置
print(i, j)

string.find函數還具有一個可選的第三個參數,它是一個索引,告訴函數應該從目標字符串的哪個位置開始搜索。當我們處理一個字符串中與給定模式相匹配的所以內容時,這個設置是非常有用的。我們可以循環的進行查找操作。當然了,這里只是說了最普通,也是最簡單的一種方式,對于第二個參數,我們完全可以傳遞一個正則表達式,也就是一個pattern,進行正則匹配。示例代碼:

 

 

復制代碼 代碼如下:

local str = "Hello12345World"
local i, j = string.find(str, "%d+")
print(i, j) -- 6   10

 

find的兄弟match

函數string.match與string.find非常相似,它也是用于在一個字符串中搜索一種模式。區別在于,string.match返回的是目標字符串中與模式相匹配的那部分子串,并不是該模式所在的位置。示例代碼:

 

復制代碼 代碼如下:

local str = "Hello12345World"
local subStr = string.match(str, "%d+")
print(subStr)
 
local i, j =string.find(str, "%d+")
subStr =string.sub(str, i, j)
print(subStr)
 
-- 是不是可以認為match等于find + sub呢?

match和find是如此的相近,因此,在實際開發中,按照實際的需要,決定采用哪個。

 

替換利器gsub

string.gsub有3個參數:目標字符串、模式和替換字符串。它的基本用法是將目標字符串中所有出現模式的地方替換為目標字符串。來看一段簡短的代碼,就什么都明白了。

復制代碼 代碼如下:

local str = "Hello World"
local strResult = string.gsub(str, "Hello", "Jelly")
print(strResult) -- Jelly World

另外gsub還有可選的第四個參數,可以限制替換的次數。示例代碼如下:

 

 

復制代碼 代碼如下:

local str = "Hello World"
 
-- 這里不限制替換次數
local strResult, cnt = string.gsub(str, "l", "o")
print(strResult) -- Heooo Worod
print(cnt) -- 實際替換的次數
 
-- 開始限制替換次數
strResult, cnt = string.gsub(str, "l", "o", 1)
print(strResult) -- Heolo World
print(cnt) -- 就替換了一次

這里還有重點需要介紹,也就是gsub的強大之處。先看一段代碼,然后再做介紹。
復制代碼 代碼如下:

local replaceTb = {hello = "Jelly", world = "Think"}
 
local str = "hello world"
 
-- 注意,第3個參數是一個table
local strResult = string.gsub(str, "hello", replaceTb)
print(strResult) -- Jelly world
 
strResult = string.gsub(strResult, "world", replaceTb)
print(strResult) -- Jelly Think
 
strResult = string.gsub(strResult, "hello", replaceTb)
print(strResult) -- Jelly Think

可以看到,gsub的第三個參數是一個table,也就是說,當gsub的第三個參數是一個table時,如果在查找的字符串中有與第二個參數相匹配的內容,就會將該內容作為key,在table中查找該key對應的value;如果該table中沒有這個key,則不進行替換;上面的代碼就是表明這個意思。接下來再來看一段比較神奇的代碼:
復制代碼 代碼如下:

local replaceFunc = function (str)
    return str .. "JellyThink"
end
local str = "hello world"
-- 注意,第3個參數是一個table
local strResult = string.gsub(str, "hello", replaceFunc)
print(strResult) -- helloJellyThink world

 

沒有看錯,gsub的第三個參數還可以是一個函數,該函數的參數是被匹配的字符串,該函數的返回值將會作為目標字符串去進行替換匹配的內容。

沒法形容的gmatch

我也不知道要怎么形容gmatch,gmatch會返回一個迭代器函數,你可以使用這個迭代器函數去迭代匹配的所有內容??聪铝写a:

復制代碼 代碼如下:

local str = "Hello World"
local iteratorFunc = string.gmatch(str, "%a+") -- %a+表示匹配所有單詞
 
for i in iteratorFunc do
    print(i)
end

 

如果你對迭代器還不熟悉的話,可以看這里。我現在就使用find來實現一個我們自己的gmatch,功能和gmatch是差不多的。代碼如下:

 

復制代碼 代碼如下:

local str = "Hello World"
 
-- 使用find來實現一個自己的gmatch
local myGmatch = function (s, pattern)
  local resultTb = {} -- 相當于迭代器中的恒定狀態
  local index = 0 -- 相當于迭代器中的控制變量
 
  local i, j = string.find(s, pattern)
  while i do
    resultTb[#resultTb + 1] = string.sub(s, i, j)
    i, j = string.find(s, pattern, j + 1)
  end
 
  return function () -- 返回一個迭代器函數
    index = index + 1
    return resultTb[index]
  end
end
 
for i in myGmatch(str, "%a+") do
  print(i)
end

 

總結

這里就總結到這里了,這篇文章很詳細的幾個字符串庫中我認為比較重要的函數。我想我已經總結的很詳細了,寫了那么多的示例代碼,應該還好理解。就這樣了。希望對大家有用。最后,我希望大家也和我一起分享,分享你的學習心得,分享你的IT人生,期待。。。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
北条麻妃一区二区三区中文字幕| 久久久天堂国产精品女人| 九九久久国产精品| 久久久精品欧美| 国产精品揄拍一区二区| 91中文在线视频| 色妞欧美日韩在线| 日本精品视频在线播放| 亚洲国产精品人久久电影| 欧美精品一区三区| 色哟哟亚洲精品一区二区| 欧美精品久久一区二区| 久久久久免费精品国产| 日日狠狠久久偷偷四色综合免费| 久久久噜噜噜久噜久久| 亚洲欧洲美洲在线综合| 亚洲精品白浆高清久久久久久| 亚洲欧美激情精品一区二区| 欧美成人精品一区二区三区| 欧美日韩中文字幕在线| 国产精品久久久久久久久久免费| 中文字幕亚洲无线码在线一区| 一区二区在线免费视频| 欧美乱人伦中文字幕在线| 91夜夜未满十八勿入爽爽影院| 国产成人精品a视频一区www| 狠狠色狠狠色综合日日小说| 91久久久久久久久久久久久| 国产欧美精品一区二区三区介绍| 国产欧美一区二区三区久久人妖| 91久久精品视频| 久久99久国产精品黄毛片入口| 中文字幕国产精品| 欧美日韩成人在线观看| 久久躁狠狠躁夜夜爽| 动漫精品一区二区| 成人性生交大片免费看视频直播| 亚洲欧美精品伊人久久| 亚洲欧美日韩精品久久亚洲区| 久久精品免费电影| 九九视频直播综合网| 国产在线拍揄自揄视频不卡99| 亚洲 日韩 国产第一| 国产精品视频男人的天堂| 日韩精品欧美激情| 亚洲精品国产电影| 国产一区二区视频在线观看| 精品少妇v888av| 久久国内精品一国内精品| 欧美尤物巨大精品爽| 日韩精品在线免费播放| 欧美午夜女人视频在线| 97国产精品视频人人做人人爱| 亚洲免费视频一区二区| 欧美理论电影在线播放| 久久精品国产精品亚洲| 色偷偷噜噜噜亚洲男人| 美女福利精品视频| 国产精品国产福利国产秒拍| 欧美日韩高清在线观看| 日韩欧美aaa| 中文字幕成人在线| 国产精品观看在线亚洲人成网| 91精品国产91久久久久久不卡| 日韩激情视频在线播放| 欧美亚洲成人精品| 欧美激情影音先锋| 国产日产欧美精品| 亚洲一级一级97网| 91成人免费观看网站| 97在线看免费观看视频在线观看| 2019中文字幕在线| 日韩成人在线观看| 中文字幕日韩视频| 激情懂色av一区av二区av| 一级做a爰片久久毛片美女图片| 国产亚洲精品美女久久久久| 亚洲第一国产精品| 久久久www成人免费精品张筱雨| 日韩成人av网| 精品成人国产在线观看男人呻吟| 久久久91精品国产| 日韩中文字幕在线看| 欧美日韩精品在线| 欧美高清在线视频观看不卡| 欧美综合在线观看| 色偷偷噜噜噜亚洲男人| 色久欧美在线视频观看| 亚洲欧美一区二区激情| 另类少妇人与禽zozz0性伦| 激情成人中文字幕| 日韩成人av在线播放| 成人精品一区二区三区| 夜夜嗨av色一区二区不卡| 97久久精品在线| 国产成人福利视频| 91av网站在线播放| 亚洲精品色婷婷福利天堂| 欧美色图在线视频| 国产精品久久久久久久app| 欧美精品一区二区三区国产精品| 欧美整片在线观看| 7m第一福利500精品视频| 久久这里只有精品99| 青青草原一区二区| 国产精品一区二区久久| 日韩中文字幕精品视频| www国产精品com| 一区二区av在线| 国产精品国产亚洲伊人久久| 日韩精品在线看| 日韩av有码在线| 91九色视频在线| 久久人91精品久久久久久不卡| 欧美日韩一区二区免费视频| 欧美日韩激情视频8区| 北条麻妃99精品青青久久| 国产精品久久久久久久久久东京| 久久久久女教师免费一区| 亚洲图片欧美午夜| 91久久嫩草影院一区二区| 成人妇女淫片aaaa视频| 精品伊人久久97| 国产成人一区二区在线| 日韩中文字幕第一页| 日韩中文第一页| 亚洲国产欧美日韩精品| 成人信息集中地欧美| 亚洲精品久久7777777| 中文字幕亚洲欧美| 国产成人精品在线观看| 久久99精品久久久久久琪琪| 色播久久人人爽人人爽人人片视av| 国产极品精品在线观看| 国产综合在线视频| 欧美在线视频观看免费网站| 亚洲精品国产精品国自产在线| 欧美美女15p| 久久久精品2019中文字幕神马| 久久久久久久久中文字幕| 欧美激情精品久久久| 午夜精品一区二区三区在线视频| 日韩在线视频二区| 欧美超级乱淫片喷水| 国产精品吊钟奶在线| 成人黄色生活片| 久久久精品在线| 亚洲国产成人久久| 国模极品一区二区三区| 精品久久久久久久久久ntr影视| 国产一区二区激情| 亚洲丝袜在线视频| 成人久久久久爱| 日韩欧美一区二区三区久久| 亚洲精品电影久久久| 亚洲老板91色精品久久| 亚洲电影免费观看高清完整版在线观看| 亚洲自拍欧美色图| 欧美在线精品免播放器视频| 国产免费一区二区三区在线观看| 97久久精品视频| 色综合老司机第九色激情| 成人免费视频97| 亚洲人成免费电影|