Lua字符串配对match函数

Lua字符串配对match函数教程

Lua 中 match 函数只寻找源字串 str 中的第一个配对,参数 init 可选, 指定搜寻过程的起点, 默认为 1。

在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串,当没有成功的配对时, 返回 nil。

match函数详解

语法

string.match(str, pattern, init)

参数

参数 描述
str 源字符串
pattern 模式
init 开始索引

返回值

返回匹配结果,当没有成功的配对时, 返回 nil。

match正则

使用字符串的 match 函数进行查找时,是支持正则查找的,具体正则如下:

正则 描述
.(点) 与任何字符配对
%a 与任何字母配对
%c 与任何控制符配对(例如 \n)
%d 与任何数字配对
%l 与任何小写字母配对
%p 与任何标点(punctuation)配对
%s 与空白字符配对
%u 与任何大写字母配对
%w 与任何字母/数字配对
%x 与任何十六进制数配对
%z 与任何代表 0 的字符配对
%x (此处 x 是非字母非数字字符) 与字符 x 配对。主要用来处理表达式中有功能的字符 (^$()%.[]*+-?)的配对问题,例如 %% 与 % 配对
[数个字符类] 与任何 [] 中包含的字符类配对,例如 [%w_] 与任何字母 / 数字, 或下划线符号 (_) 配对
[^数个字符类] 与任何不包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对

当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对。例如, %S 表示与任何非空白字符配对,例如,’%A’ 非字母的字符。

‘%’ 用作特殊字符的转义字符,因此 ‘%.’ 匹配点;’%%’ 匹配字符 ‘%’。转义字符 '%'不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。

模式条目可以是:

  • 单个字符类匹配该类别中任意单个字符;
  • 单个字符类跟一个 ‘*’, 将匹配零或多个该类的字符。 这个条目总是匹配尽可能长的串;
  • 单个字符类跟一个 ‘+’, 将匹配一或更多个该类的字符。 这个条目总是匹配尽可能长的串;
  • 单个字符类跟一个 ‘-’, 将匹配零或更多个该类的字符。 和 ‘*’ 不同, 这个条目总是匹配尽可能短的串;
  • 单个字符类跟一个 ‘?’, 将匹配零或一个该类的字符。 只要有可能,它会匹配一个;
  • %*n*, 这里的 n 可以从 1 到 9; 这个条目匹配一个等于 n 号捕获物(后面有描述)的子串。
  • %b*xy*, 这里的 xy 是两个明确的字符; 这个条目匹配以 x 开始 y 结束, 且其中 xy 保持 平衡 的字符串。 意思是,如果从左到右读这个字符串,对每次读到一个 x+1 ,读到一个 y-1, 最终结束处的那个 y 是第一个记数到 0 的 y。 举个例子,条目 %b() 可以匹配到括号平衡的表达式。
  • %f[*set*], 指边境模式; 这个条目会匹配到一个位于 set 内某个字符之前的一个空串, 且这个位置的前一个字符不属于 set 。 集合 set 的含义如前面所述。 匹配出的那个空串之开始和结束点的计算就看成该处有个字符 ‘\0’ 一样。

案例

match字符串匹配

使用 match() 函数,实现字符串匹配

#!/usr/bin/lua print("haicoder(www.haicoder.net)\n") print(string.match("I have 2 questions for you.", "%d+ %a+")) print(string.format("%d, %q", string.match("I have 2 questions for you.", "(%d+) (%a+)")))

程序运行后,控制台输出如下:

21_Lua match函数.png

我们使用了 string.match 实现了字符串匹配。

Lua字符串匹配match函数总结

在 Lua 中 match 函数只寻找源字串 str 中的第一个配对,参数 init 可选, 指定搜寻过程的起点, 默认为 1。

在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串,当没有成功的配对时, 返回 nil。