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