--[[
.(點)
: 與任何字元配對
%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值算出...