lua 正規表示式

2021-10-03 13:14:54 字數 4340 閱讀 7114

--[[

.(點)

: 與任何字元配對

%a: 與任何字母配對

%c: 與任何控制符配對(例如\n)

%d: 與任何數字配對

%l: 與任何小寫字母配對

%p: 與任何標點(punctuation)配對

%s: 與空白字元配對

%u: 與任何大寫字母配對

%w: 與任何字母/數字配對

%x: 與任何十六進製制數配對

%z: 與任何代表0的字元配對%x

(此處x是非字母非數字字元)

: 與字元x配對. 主要用來處理表示式中有功能的字元(

^$()%.

*+-?

)的配對問題, 例如%

%與%配對

[數個字元類]

: 與任何[

]中包含的字元類配對. 例如[

%w_]與任何字母/數字, 或下劃線符號(_)配對

+ 匹配前一字元1次或多次

* 匹配前一字元0次或多次

- 匹配前一字元0次或多次

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

%' 用作特殊字元的轉義字元,因此 '%.

' 匹配點;'%%

' 匹配字元 '

%'。轉義字元 '

%'不僅可以用來轉義特殊字元,還可以用於所有的非字母的字元。當對乙個字元有疑問的時候,為安全起見請使用轉義字元轉義他。

string.find(字串查詢)

string.gsub(全域性字串替換)

string.gfind(全域性字串查詢)

string.

gmatch

(返回查詢到字串的迭代器)]]

-- string.

gmatch

(str, pattern) 返回乙個迭代器函式

local s =

"hello world from lua"

for w in string.

gmatch

(s,"%a+")do

print

(w)end

local s1 =

"hello=123 123=hello"

for w,s in string.

gmatch

(s1,

"(%d+)=(%a+)")do

print

(w,s)

end--[[

string.

gsub

(str, pattern, repl, n)

string.

gsub

()函式根據給定的配對表示式對源字串str進行配對, 同時返回源字串的乙個副本, 該副本中成功配對的所有子字串都將被替換.

函式還將返回成功配對的次數.實際的替換行為由repl引數的型別決定:

當repl為字串時, 所有成功配對的子字串均會被替換成指定的repl字串.

當repl為table時, 對每個成功配對的子字串, 函式均會試圖尋找以其為key值的table中的元素, 並返回該元素.

如果該配對包含任何捕獲資訊, 則以編號為1號的捕獲作為key值進行查詢.

當repl為函式時, 每個成功配對的子字串均會作為引數被傳入到該函式中去.

在repl是table時, 如果該table返回了字串或數字的值, 這個值依然會被用於替換副本字串中的配對子字串.

如果該table/函式返回的值為空, 將不發生替換.

n引數可選, 當它被指定時, string.

gsub

()函式只對源字串中的前n個成功配對的成員進行操作.]]

--當repl為字串時

--當只匹配乙個字串時

local s2 =

"hello world"

print

(string.

gsub

(s2,

"(%w+)"

,"%1 %1"))

--這裡每次只會匹配到乙個字串 所以替換成 兩個一樣的字元

print

(string.

gsub

(s2,

"(%w+)"

,"%1+%1+%1"))

--擴充套件

--當匹配兩個字串時

print

(string.

gsub

(s2,

"(%w+)%s*(%w+)"

,"%2+%1"))

--每次匹配到兩個字串 替換成%2+

%1%2是第二個字串 %

1是第乙個字串

--當repl為函式時

string.

gsub

(s2,

"%w+"

, function ( word )

--返回乙個引數

print

(word)

end)

string.

gsub

(s2,

"(%w+)%s*(%w+)"

,function ( word1,word2 )

--返回兩個引數

--print

(string.

len(word1)

,string.

len(word2)

)print

(word1,word2)

end)

--當repl為table時

local temp =

print

(string.

gsub

(s2,

"(%w+)"

,temp))--

[[string.

match

(str, pattern, init)

string.

match

()只尋找源字串str中的第乙個配對. 引數init可選, 指定搜尋過程的起點, 預設為1.

在成功配對時, 函式將返回配對表示式中的所有捕獲結果; 如果沒有設定捕獲標記, 則返回整個配對字串. 當沒有成功的配對時, 返回nil.]]

print

(string.

match

(s2,

"(%w+)",1

))print

(string.

match

("hessss"

,"he%w+",1

))--[

[string.

find

(str, pattern, init, plain)

string.find的基本應用就是用來在目標串(subject string)內搜尋匹配指定的模式的串。

函式如果找到匹配的串返回他的位置,否則返回nil.最簡單的模式就是乙個單詞,僅僅匹配單詞本身。

比如,模式'hello'僅僅匹配目標串中的"hello"。當查詢到模式的時候,函式返回兩個值:匹配串開始索引和結束索引]]

print

(string.

find

(s2,

"e%w+"))

-- string.

find

(s,"hello")--

>15

-- string.

find

(s,"world")--

>711

-- string.

find

(s,"l")--

>33

-- string.

find

(s,"lll")--

> nil

local pos1 =

1--迴圈查詢

while

true

do pos1,pos2 = string.

find

("hello hello"

,"e%w+"

,pos1)

--print

(pos1,pos2)

ifnot pos1 then break end

pos1 = pos2 +

1end--[

[string.

sub(str,spos,epos)

string.gsub的功能是擷取字串,他從指定起始位置擷取乙個字串。string.sub可以利用string.find返回的值擷取匹配的子串。

對簡單模式而言,匹配的就是其本身]]

-- s =

"hello world"

local i, j = string.

find

(s2,

"hello")--

>15

print

(string.

sub(s, i, j))--

> hello

Lua正規表示式

正規表示式作為一種通用的算式,大量用於文字處理邏輯中,其主要好處是速度能夠達到極致,而且 量通常會非常少,本篇主要介紹lua中的正則使用,由於這樣的文章網上隨處都可以搜到,而且不乏整理的不錯的,這裡就不想再重新做這件事情。正規表示式主要處理匹配問題,即通過給定語義萬用字元串,返回匹配成功的字串列表。...

lua正規表示式

一樣,都匹配乙個字元的0次或多次出現,但是他進行的是最短匹配。某些時候這兩個用起來沒有區別,但有些時候結果將截然不同。比如,如果你使用模式 a w 來查詢標示符,你將只能找到第乙個字母,因為 w 永遠匹配空。另一方面,假定你想查詢c程式中的注釋,很多人可能使用 也就是說 後面跟著任意多個字元,然後跟...

lua 正規表示式使用

在使用lua的string庫匹配模式的時候,對於一些比較麻煩的處理,搜網頁總是不得其所,下面是接觸到的一些經典用法 string.find string.gsub string.sub 對這三個方法的基本使用不概述了 現有乙個需求如下 替換 字串 戰鬥力增加 為 戰鬥力增加5 注5是帶入a b值算出...