Lua正規表示式

2021-06-28 17:42:38 字數 1652 閱讀 6962

正規表示式作為一種通用的算式,大量用於文字處理邏輯中,其主要好處是速度能夠達到極致,而且**量通常會非常少,本篇主要介紹lua中的正則使用,由於這樣的文章網上隨處都可以搜到,而且不乏整理的不錯的,這裡就不想再重新做這件事情。

正規表示式主要處理匹配問題,即通過給定語義萬用字元串,返回匹配成功的字串列表。

在匹配的基礎上,正則引擎往往提供了字串的查詢、替換、分割等功能,lua支援查詢與替換,但不支援分割,分割函式可以在已有介面上進行擴充套件,附錄中引用了lua社群的實現**。

本篇單純的簡要介紹lua的匹配問題。

lua正則中的特殊字元(元字元)包括如下幾種:

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

轉義字元(元字元%):

'%' 用作特殊字元的轉義字元,'%.' 匹配點;'%%' 匹配字元 '%',』%』與特定字母結合有特定含義(萬用字元),如下:

%a: 與任何字母配對

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

%d: 與任何數字配對

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

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

%s: 與空白字元配對

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

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

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

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

對於上面的%x(其中x代表a,c,d,...,z),lua正則支援其大寫形式,大寫形式代表非%x,即有%x = ^%x,比如%a表示與任意非字母配對。

其他萬用字元(元字元.):

.(點): 與任何字元配對

字符集(元字元):

出了上面提到的萬用字元,我們還可以自定義字符集,如[%a%d]就是與字母和數字配對,我們還可以使用』-『符號來指定乙個範圍,如[0-7]表示[01234567],[a-z]表示小寫字母,通過字符集,我們可以定義其他複雜的萬用字元。

貪婪與吝嗇(元字元+、-、?、*)

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

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

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

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

元字元+和*是貪婪的,總是進行最長的匹配,而-則是吝嗇的,總是進行最短匹配,注意元字元-可以匹配0次。例子:

待匹配的字串:a

b模式串(1):.+此時將匹配整個字串,貪婪模式下,正則引擎即使發現了第乙個匹配,也不會停止,因此效率相對較低。

模式串(2):.-此時將依次匹配a、b,最短匹配模式下,一旦正則引擎發現第乙個匹配就停止動作,不會繼續匹配,

開頭與結尾(元字元^、$)

^x表示非x,可以理解為正則引擎發現了x字元,那麼就可以從這裡作為乙個匹配的開頭,匹配過程中可能希望有多個開頭(特別是吝嗇模式),這個符號用的頻率會比較高,x$表示以x結尾,這裡的結尾指的是整個待匹配字串的最後乙個字元,這個符號使用的場合和頻率相對會比較少。

取己所需(元字元())

圓括號是乙個很好用的元字元,如上a,如果我們只是想讓lua正則引擎返回字元a,可以採用模式(.+),否則它會返回整個字串。

lua正規表示式

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

lua 正規表示式

點 與任何字元配對 a 與任何字母配對 c 與任何控制符配對 例如 n d 與任何數字配對 l 與任何小寫字母配對 p 與任何標點 punctuation 配對 s 與空白字元配對 u 與任何大寫字母配對 w 與任何字母 數字配對 x 與任何十六進製制數配對 z 與任何代表0的字元配對 x 此處x是...

lua 正規表示式使用

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