Lua 正則表達(dá)式

 .        任意字符
%a        字母
%c        控制字符
%d        數(shù)字
%l        小寫(xiě)字母
%p        標(biāo)點(diǎn)字符
%s        空白符
%u        大寫(xiě)字母
%w        字母和數(shù)字
%x        十六進(jìn)制數(shù)字
%z        代表0的字符

上面字符類(lèi)的大寫(xiě)形式表示小寫(xiě)所代表的集合的補(bǔ)集末秃。例如, '%A'非字母的字符: 

特殊字符
'%' 用作特殊字符的轉(zhuǎn)義字符
'%.' 匹配 .
'%%' 匹配字符 '%'

用'[]'匹配字符集中的字符一次
'[%w_]' 匹配字母數(shù)字和下劃線(xiàn)
'[01]' 匹配二進(jìn)制數(shù)字
'[%[%]]'匹配一對(duì)方括號(hào)
在'[]'中使用連字符'-'
'%d'    表示 '[0-9]'隐孽;
'%x'    表示 '[0-9a-fA-F]'
'[0-7]' 表示 '[01234567]'

在'[]'開(kāi)始處使用 '^' 表示其補(bǔ)集:
'[^0-7]' 匹配任何不是八進(jìn)制數(shù)字的字符领舰;
'[^\n]' 匹配任何非換行符戶(hù)的字符神年。
'[^%s]' == '%S'

模式修飾符
  ^ 匹配字符串開(kāi)頭
  $ 匹配字符串結(jié)尾

  + 匹配前一字符1次或多次
  * 匹配前一字符0次或多次,最長(zhǎng)匹配
  - 匹配前一字符0次或多次,最短匹配
  ? 匹配前一字符0次或1次

查找

string.find(s, pattern [, init [, plain]])

s : 需要進(jìn)行查找的字符串
pattern : 需要匹配的正則表達(dá)式
init : 搜索的起始位置
plain : 默認(rèn)為false哼凯,true時(shí)關(guān)閉匹配正則模式
將查找目標(biāo)模板在給定字符串中出現(xiàn)的位置,找到返回起始和結(jié)束位置猿涨,沒(méi)找到返回nil

  • 注:find 的第二個(gè)參數(shù)使用了某種匹配模式雷蹂, 并且模式串里面帶括號(hào),那么表示會(huì)“捕捉”括號(hào)括起來(lái)的模式匹配到的字符串溯乒,并且作為返回值冒萄,從第三個(gè)返回值開(kāi)始返回所有匹配
print(string.find("hello, world", "%s", 2))
=> 7  7

print(string.find("hello, world", "%s", 8)
=> nil

print(string.find("hello, world", "%s", 0, true)
=> nil

print(string.find("hello, world", " ", 0, true))
=> 7  7

-- 其中%1表示拷貝匹配到的第一個(gè)內(nèi)容,同樣的%n來(lái)拷貝匹配到的第n個(gè)內(nèi)容
print(string.find("abc \"it's a cat\"", "([\"'])(.-)%1")) 
=> 5  16  "  it's a cat
string.match(s, pattern [, init])

s : 需要進(jìn)行查找的字符串
pattern : 需要匹配的正則表達(dá)式
init : 搜索的起始位置
將查找目標(biāo)模板在給定字符串中出現(xiàn)的匹配字符橙数,如果沒(méi)有尊流,返回nil

print(string.match("hello, world", "%S%s%S"))
=> , w

print(string.match("hello, world", "%S%s%S", 8))
=> nil

print(string.match("hello, world", "(hello), world"))
=> hello
注:如果pattern中有用()起來(lái)的,那么只返回()中的內(nèi)容,如果多個(gè)括號(hào)灯帮,返回多個(gè)值

print(string.match("hello, world", "(hello), (world)"))
=> hello  world

-- 其中%1表示拷貝匹配到的第一個(gè)內(nèi)容崖技,同樣的%n來(lái)拷貝匹配到的第n個(gè)內(nèi)容
print(string.match("abc \"it's a cat\"", "([\"'])(.-)%1")) 
=> "  it's a cat
string.gmatch (s, pattern)

s : 需要進(jìn)行查找的字符串
pattern : 需要匹配的正則表達(dá)式
返回一個(gè)迭代器函數(shù),每一次調(diào)用這個(gè)函數(shù)钟哥,返回一個(gè)在字符串s找到的下一個(gè)符合pattern描述的子串迎献。

local str = "hello, world"
local iter = string.gmatch(str, "%S")

for w, v in iter do
    print(w)
end

=>
h
e
l
l
o
,
w
o
r
l
d

替換

string.gsub (s, pattern, repl [,m])

s : 需要進(jìn)行查找的字符串
pattern : 需要匹配的正則表達(dá)式
repl : 需要替換成的字符串
[, m] : 只看s的前m個(gè)字符
將pattern中匹配到的字符串替換成repl字符串,repl可以是string腻贰,也可以是個(gè)函數(shù)吁恍,或是table,如果是函數(shù)播演,就會(huì)用捕獲的內(nèi)容作為參數(shù)調(diào)用該函數(shù)冀瓦,將返回的內(nèi)容作為替換字符串。如果是table写烤,則用捕獲的內(nèi)容為key去取table的值來(lái)作為替換字符串,如果不存在翼闽,就不做替換
返回值 : 替換后的字符串, 替換的次數(shù)

  • 注:把源字符串當(dāng)做gsub的第一個(gè)參數(shù)傳入后洲炊,方法執(zhí)行并不會(huì)修改源字符串感局,需要重新賦值接收才能獲取到修改后的字符串
local str = "hello, world"
print(string.gsub(str, "hello", "hi"))
=> hi, world  1

local str = "hello, world"
print(string.gsub(str, ".", function(pattern)
  if pattern == "l" then
    return "abc"
  end
  return pattern
end))
=> heabcabco, worabcd      12

function expand(s)
     return string.gsub(s, "$(%w+)", _G)
end
name = "Lua"; status = "great"
print(expand("$name is $status, isn't it?"))
=> Lua is great, isn't it?  2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尼啡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子询微,更是在濱河造成了極大的恐慌崖瞭,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撑毛,死亡現(xiàn)場(chǎng)離奇詭異读恃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)代态,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疹吃,“玉大人蹦疑,你說(shuō)我怎么就攤上這事∪唬” “怎么了歉摧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腔呜。 經(jīng)常有香客問(wèn)我叁温,道長(zhǎng),這世上最難降的妖魔是什么核畴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任膝但,我火速辦了婚禮,結(jié)果婚禮上谤草,老公的妹妹穿的比我還像新娘跟束。我一直安慰自己,他們只是感情好丑孩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布冀宴。 她就那樣靜靜地躺著,像睡著了一般温学。 火紅的嫁衣襯著肌膚如雪略贮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天仗岖,我揣著相機(jī)與錄音逃延,去河邊找鬼。 笑死轧拄,一個(gè)胖子當(dāng)著我的面吹牛真友,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播紧帕,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盔然,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼桅打!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起愈案,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挺尾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后站绪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體遭铺,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年恢准,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了魂挂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡馁筐,死狀恐怖涂召,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敏沉,我是刑警寧澤果正,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站盟迟,受9級(jí)特大地震影響秋泳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攒菠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一迫皱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辖众,春花似錦舍杜、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至还惠,卻和暖如春饲握,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚕键。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工救欧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锣光。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓笆怠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親誊爹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹬刷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • re模塊手冊(cè) 本模塊提供了和Perl里的正則表達(dá)式類(lèi)似的功能瓢捉,不關(guān)是正則表達(dá)式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 3,995評(píng)論 0 13
  • Python中的正則表達(dá)式(re) import rere.match #從開(kāi)始位置開(kāi)始匹配办成,如果開(kāi)頭沒(méi)有則無(wú)re...
    BigJeffWang閱讀 7,064評(píng)論 0 99
  • #首先泡态,python中的正則表達(dá)式大致分為以下幾部分: 元字符 模式 函數(shù) re 內(nèi)置對(duì)象用法 分組用法 環(huán)視用法...
    mapuboy閱讀 1,605評(píng)論 0 51
  • 本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例...
    Python程序媛閱讀 1,347評(píng)論 0 22
  • 嗨迂卢,你最近還好嗎某弦?好久沒(méi)見(jiàn)或者說(shuō)我們從來(lái)沒(méi)有見(jiàn)過(guò),你知道我很想你嗎而克? 我猜你肯定不知道靶壮,因?yàn)槲覀冞€沒(méi)有遇見(jiàn),還沒(méi)有...
    芝士尾巴閱讀 226評(píng)論 2 2