openresty开发系列17--lua中的正则表达式
生活随笔
收集整理的這篇文章主要介紹了
openresty开发系列17--lua中的正则表达式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
與其他腳本語言不同的是,Lua并不使用POSIX規(guī)范的正則表達(dá)式[4](也寫作regexp)來進(jìn)行模式匹配。主要的原因出于程序大小方面的考慮:實(shí)現(xiàn)一個(gè)典型的符合POSIX標(biāo)準(zhǔn)的regexp大概需要4000行代碼,這比整個(gè)Lua標(biāo)準(zhǔn)庫加在一起都大。權(quán)衡之下,Lua中的模式匹配的實(shí)現(xiàn)只用了500行代碼,當(dāng)然這意味著不可能實(shí)現(xiàn)POSIX所規(guī)范的所有更能。然而,Lua中的模式匹配功能是很強(qiáng)大的,并且包含了一些使用標(biāo)準(zhǔn)POSIX模式匹配不容易實(shí)現(xiàn)的功能。 Lua正則中的特殊字符(元字符)包括如下幾種:( ) . % + - * ?[ ] ^ $ lua正則支持其大寫形式,大寫形式代表非,即有%A = ^%a,%A表示與任意非字母配對(duì)。
| 普通字符 | 除去%.[]()^$*+-?的字符,匹配字符本身 | Kana | Kana |
| . | 匹配任意字符 | Ka.a | Kana |
| % | 轉(zhuǎn)義字符,改變后一個(gè)字符的原有意思。當(dāng)后面的接的是特殊字符時(shí),將還原特殊字符的原意。%和一些特定的字母組合構(gòu)成了lua的預(yù)定義字符集。%和數(shù)字1~9組合表示之前捕獲的分組 | K%wna %%na%% (a)n%1 | Kana %na% ana |
| [...] | 字符集(字符類)。匹配一個(gè)包含于集合內(nèi)的字符。[...]中的特殊字符將還原其原意,但有下面幾種特殊情況 1. %],%-,%^作為整體表示字符']','-','^' 2. 預(yù)定義字符集作為一個(gè)整體表示對(duì)應(yīng)字符集 3. 當(dāng)]位于序列的第一個(gè)字符時(shí)只表示字符']' 4. 形如[^...],[...-...]有特定的其他含義 | [a%]na [%a]na [%%a]na []]na [%]]na [a-]na | %na wna wna ]na ]na -na |
| [...-...] | -表示ascii碼在它前一個(gè)字符到它后一個(gè)字符之間的所有字符 | [a-z]a | na |
| [^...] | 不在...中的字符集合。 | [^0-9]na [^^0-9]na | Kna Kna |
| * | 表示前一個(gè)字符出現(xiàn)0次或多次 | [0-9]* [a-z]*9* | 2009 na |
| + | 表示前一個(gè)字符出現(xiàn)1次或1次以上 | n+[0-9]+ | n2009 |
| ? | 表示前一個(gè)字符出現(xiàn)0次或1次 | n?[0-9]+ | 2009 |
| %s | 空白符[ \r\n\t\v\f] | an[%s]?9 | an 9 |
| %p | 標(biāo)點(diǎn)符號(hào) | an[%p]9 | an.9 |
| %c | 控制字符 | ? | ? |
| %w | 字母數(shù)字[a-zA-Z0-9] | [%w]+ | Kana9 |
| %a | 字母[a-zA-Z] | [%a]* | Kana |
| %l | 小寫字母[a-z] | - | |
| %u | 大寫字母[A-Z] | - | |
| %d | 數(shù)字[0-9] | - | |
| %x | 16進(jìn)制數(shù)[0-9a-fA-F] | - | |
| %z | ascii碼是0的字符 | - | |
| (...) | 表達(dá)式中用小括號(hào)包圍的子字符串為一個(gè)分組,分組從左到右(以左括號(hào)的位置),組序號(hào)從1開始遞增。 | ab(%d+) (%d+)%1 | ab233 123123 |
| ^ | 匹配字符串開頭 | ^(%a)%w* | abc123 |
| $ | 匹配字符串結(jié)尾 | %w*(%d)$ | abc123 |
| %bxy | 平衡匹配(匹配xy對(duì))。這里的x,y可以是任何字符,即使是特殊字符也是原來的含義,匹配到的子串以x開始,以y結(jié)束,并且如果從x開始,每遇到x,計(jì)算+1,遇到y(tǒng)計(jì)數(shù)-1,則結(jié)束的y是第一個(gè)y使得計(jì)數(shù)等于0。就是匹配成對(duì)的符號(hào),常見的如%b()匹配成對(duì)的括號(hào) | %b() %d+%b() | (3+4(x*2)) 2(3+4(x*2)) |
轉(zhuǎn)載于:https://www.cnblogs.com/reblue520/p/11429825.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的openresty开发系列17--lua中的正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openresty开发系列16--lua
- 下一篇: 通过Java执行python文件