日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lua_string_pattern

發布時間:2023/12/13 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lua_string_pattern 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩大特點:

1. string庫中所有的字符索引從前往后是1,2,...;從后往前是-1,-2,...

2. string庫中所有的function都不會直接操作字符串,而是返回一個新的字符串。

?

庫函數:

1、string.len,string.rep,string.upper,string.lower,string.sub,string.format

local str = "abc"

print(string.len(str)) --6

print(string.rep(str, 2^2)) --abcabcabcabc

print(string.upper(str)) --ABC

print(string.lower("ABC")) --abc

print(string.format("%02d/%02d/%04d", 5, 12, 2001))--05/12/2001

print(string.sub(str, 1, 2))--ab

截取字符串str的從第i個字符到第j個字符之間的串。

lua中,字符串的第一個字符索引從1開始,你也可以使用負值,不提供第三個參數,則默認為-1,

?

2、string.char,string.byte

  string.byte (s [, i [, j] ])函數返回字符s[i], s[i+1], ···, s[j]的內部數字編碼(ASCII碼),其

? ? ? 中參數i的默認值是1,而參數j的默認值是i。需要注意的是該函數在返回的數字編碼在跨平臺方面不一定是可移植的。

local i=97

print(string.char(i))--a

print(string.char(i, i+1, i+2))--abc

print(string.byte("abc"))--97

print(string.byte("abc", 2))--98

print(string.byte("abc", -1))--99

print(string.byte('abc', 1, 3))--97 98 99

string.char函數和string.byte函數用來處理字符和數字之間轉換。

string.char獲取0個或多個整數,將每一個數字轉換成字符,然后返回一個所有這些字符連接起來的字符串。

string.byte(s,i)將字符串s的第i個字符的轉換成整數,第二個參數可選,默認為1。

?

?

3、string.find, string.match

在目標串內搜索匹配指定的模式串。如果找到則返回對應的位置,否則返回nil。

local str = "hello world"

local i, j = string.find(str, "hello")

print(i, j) -- 1????? 5

print(string.find(str, "lll"))--nil

?  string.find( )的第三個參數是可選的:標示目標串中搜索的起始位置。

查找目標串中某單次出現的次數:

local str = "hello Maria! hello Mical! hello Sam!"

local sum = 0

local idx = 0

repeat

????? idx = string.find(str, "hello", idx+1)

????? if idx then

???????????? sum = sum + 1

????? end

until idx == nil

print("sum: ", sum) -- 3

--string.match和string.find類似,都是在指定的string中查找相應的模式。不同的是,他返回的是找到的那部分string

?

4、string.gsub

函數有四個參數:目標串,模式串,替換串,(可選:最多替換的個數)

返回替換后的字符串和替換的次數。

local str1 = "hello Maria! hello Mical! hello Sam!"

local str2, times1 = string.gsub(str1, "hello", "hi")

print( str2, times1) --hi Maria! hi Mical! hi Sam!3

?

local str3, times2 = string.gsub(str1, "hello", "hi", 2)

print( str3, times2) --hi Maria! hi Mical! hello Sam!2

?

string.gsub(s, pattern, func)

local strr = string.gsub(str1, "hello", function(s)

????? return s.."_"

end)

print(strr)--hello_ Maria! hello_ Mical! hello_ Sam!

?

5、string.gfind(s, pattern)

返回一個迭代器,迭代器每執行一次,返回下一個匹配串;

iter = string.gfind("a=b c=d", "[^%s+]=[^%s+]")

print(iter()) -- a=b

print(iter()) -- c=d

通常用于泛性for循環,下面的例子結果同上

for s in string.gfind("a=b c=d", "[^%s+]=[^%s+]") do

????? print(s) -- a=b c=d

end

?6、string.dump (function [, strip])

  返回包含有以二進制方式表示的(一個?二進制代碼塊?)指定函數的字符串。

function log(value)print(value) endlocal str_fun = string.dump(log)print(str_fun) --<-LoaQlocal fun = loadstring(str_fun)fun("hello")

?

?

模式:

對lua而言,模式串就是普通的字符串,并不受特殊對待。

1、字符類

.??????????? 任意字符

%a??????? 字母

%c???????? 控制字符

%d??????? 數字

%l???????? 小寫字母

%p??????? 標點字符

%s???????? 空白符

%u??????? 大寫字母

%w?????? 字符和數字

%z???????? 代表0的字符

上面字符類的大寫形式表示小寫所代表的集合的補集。例如,'%A'表示非字母的字符。print(string.gsub("hello world", "%A", "_")) --hello_world 1

2、特殊字符

(???? )????? .????? %??? +???? -????? *???? ????? [????? ^???? $

'%'用作特殊字符的轉義字符,'%.'匹配點;'%%'匹配字符'%'。轉義字符'%'不僅可以用來轉義特殊字符,還可以用于所有的非字母的字符。當對一個字符有疑問的時候,為安全起見請使用轉義字符轉義它。

用'[]'創建字符集:(可以使用連字符'-',在'[]'開始出使用'^'表示補集)

????? '[%w_]'? 匹配數字字母和下劃線,

????? '[01]'????? 匹配二進制數字,

????? '[%[%]]'? 匹配方括號。

????? '[0-9]'???? 匹配0到9之間的數

????? '[^0-7]'?? 匹配不是0到7之間的字符

3、模式修飾符

+ 匹配前一字符1次或多次,最長匹配

* 匹配前一字符0次或多次,最長匹配

- 匹配前一字符0次或多次,最短匹配

? 匹配前一字符0次或1次

?

'+'匹配一個或多個字符,總是進行最長匹配。

print(string.gsub("hello Sam.", "%a+", "***")) --*** ***.2

'*'與'+'類似,但是它匹配一個字符0次或多次出現。

?'-'與'*'一樣,都匹配一個字符的0次或多次出現,但是它進行的是最短匹配。

print(string.gsub("(hello)world)", "%(.*%)", "*")) --*1

print(string.gsub("(hello)world)", "%(.-%)", "*")) --*world)1

?

?

以'^'開頭的模式只匹配目標串的開始部分,以'$'結尾的模式只匹配目標串的結尾部分。

print(string.gsub("(hello)(world)", "%(.-%)", "*")) --**2

print(string.gsub("(hello)(world)", "^%(.-%)", "*")) --*(world)1

print(string.gsub("(hello)(world)", "%(.-%)$", "*")) --*1

?

'%b'用來匹配對稱的字符。常寫為'%bxy',x和y是任意兩個不同的字符;x作為匹配的開始,y作為匹配的結束。

?

'%b()'??? 匹配以'('開始,以')'結束的字符串。

'%b[]'??? '%b<>'

?

function string.split(input, delimiter)input = tostring(input)delimiter = tostring(delimiter)if (delimiter=='') then return false endlocal pos,arr = 0, {}-- for each divider foundfor st,sp in function() return string.find(input, delimiter, pos, true) end dotable.insert(arr, string.sub(input, pos, st - 1))pos = sp + 1endtable.insert(arr, string.sub(input, pos))return arr end

?

?

--[[

UTF-8

0000 - 007F

0XXXX XXXX

0080 - 07FF

110XXXXX ?10XXXXXX

0800 - FFFF

1110XXXX ?10XXXXXX 10XXXXXX

]]

?

轉載于:https://www.cnblogs.com/wrbxdj/p/5417978.html

總結

以上是生活随笔為你收集整理的lua_string_pattern的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。