正規表示式主要處理匹配問題,即通過給定語義萬用字元串,返回匹配成功的字串列表。
在匹配的基礎上,正則引擎往往提供了字串的查詢、替換、分割等功能,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從檔案路徑獲取資訊及萬用字元解釋
lua檔案從路徑中中獲取 檔名 無字尾 檔名 帶字尾 檔案所在目錄 檔案去字尾路徑 檔案字尾 首先先來獲得,lua檔案所在路徑開始吧 obj io.popen cd 如果不在互動模式下,前面可以新增local path obj read all sub 1,2 path存放當前路徑 是為了去掉換行符...
sql like 萬用字元 T sql 萬用字元
之所以要寫一篇跟萬用字元有關的知識,是因為在工作中需要檢索基礎表中name為英文名的,突然就一臉懵逼,網上檢索一下發現教程很多。檢討下還是自己基礎知識不紮實。所以寫下方便自己查閱,也歡迎大佬們指點。sql 萬用字元必須與 like 運算子一起使用 在搜尋資料庫中的資料時,sql 萬用字元可以替代乙個...
sql like 萬用字元 mysql萬用字元使用
sql模式匹配 匹配單個字元,匹配 匹配任意個字元,包括零個字元 sql模式下的匹配,預設是對於字母的大小寫沒有要求,並且sql模式下,或 是不能在模糊匹配中使用的,而是使用 like 或 not like.例如 正則模式匹配 當使用正則匹配時,使用regexp和not regexp操作符 或rli...