Lua中的正则表达式

Lua中的正则表达式

元字符 描述 表达式实例 完整匹配的字串
字符
普通字符 除去%.[]()^$*+-?的字符,匹配字符本身 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
%b
%bxy 平衡匹配(匹配xy对)。这里的x,y可以是任何字符,即使是特殊字符也是原来的含义,匹配到的子串以x开始,以y结束,并且如果从x开始,每遇到x,计算+1,遇到y计数-1,则结束的y是第一个y使得计数等于0。就是匹配成对的符号,常见的如%b()匹配成对的括号

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次。例子:

待匹配的字符串:<font>a</font><font>b</font>

模式串(1):<font>.+</font>此时将匹配整个字符串,贪婪模式下,正则引擎即使发现了第一个匹配,也不会停止,因此效率相对较低。

模式串(2):<font>.-</font>此时将依次匹配<font>a</font>、<font>b</font>,最短匹配模式下,一旦正则引擎发现第一个匹配就停止动作,不会继续匹配,

 

开头与结尾(元字符^、$)

^x表示非x,可以理解为正则引擎发现了x字符,那么就可以从这里作为一个匹配的开头,匹配过程中可能希望有多个开头(特别是吝啬模式),这个符号用的频率会比较高,x$表示以x结尾,这里的结尾指的是整个待匹配字符串的最后一个字符,这个符号使用的场合和频率相对会比较少。

 

取己所需(元字符())

圆括号是一个很好用的元字符,如上<font>a</font>,如果我们只是想让lua正则引擎返回字符a,可以采用模式<font>(.+)</font>,否则它会返回整个字符串。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值