Lua 模式匹配怎么用?

文章导读
Previous Quiz Next 模式匹配是一个非常有用的功能,用于搜索和操作字符串。Lua 通过 string 库的方法提供内置的模式匹配支持。Lua 提供了一种简洁高效的方式,根据指定的模式来操作字符串。
📋 目录
  1. 模式语法
  2. 示例 - 使用模式
A A

Lua - 模式匹配



Previous
Quiz
Next

模式匹配是一个非常有用的功能,用于搜索和操作字符串。Lua 通过 string 库的方法提供内置的模式匹配支持。Lua 提供了一种简洁高效的方式,根据指定的模式来操作字符串。

Lua 模式匹配遵循一组特殊字符和规则,这些规则决定了我们可以用来自定义字符串搜索的模式。它不像 Java 或 C++ 等其他编程语言中的正则表达式那样全面,但对于大多数文本处理任务来说已经足够。它轻量级且内置,无需包含额外的库,因此具有语言的直接支持。

模式语法

特殊字符

以下是可以在 Lua 中用于创建强大模式的特殊字符列表。

  • . (点) − 匹配任意单个字符。

  • %a − 匹配任意字母。

  • %c − 匹配任意控制字符。

  • %d − 匹配任意数字。

  • %g − 匹配除空格外的任意可打印字符。

  • %l − 匹配任意小写字母。

  • %p − 匹配任意标点字符。

  • %s − 匹配任意空白字符(空格、制表符、换行符等)。

  • %u − 匹配任意大写字母。

  • %w − 匹配任意字母数字字符(字母或数字)。

  • %x − 匹配任意十六进制数字。

  • %z − 匹配表示为 0 的字符。

  • %x (其中 x 为非字母数字字符) − 表示字符 x 本身。主要用于转义特殊字符。例如,%. 匹配字面点,%+ 匹配字面加号,依此类推。

集合

[Set] 表示法用于匹配字符类,以匹配某个范围或集合内的字符。例如,要匹配小写字母,可以使用 [a-z],要匹配数字,可以使用 [0-9]。可以在开头使用 ^ 来否定表达式。例如,[^0-9] 可用于匹配不包含数字的模式。

量词

量词 用于匹配文本中特定字符或字符组的出现次数。

  • * − 匹配零次或多次出现。

  • + − 匹配一次或多次出现。

  • - − 以贪婪方式匹配零次或多次出现。

  • ? − 匹配零次或一次出现。

锚点

锚点 用于匹配文本中模式的位置。

  • ^ − 匹配字符串的开头。

  • $ − 匹配字符串的结尾。

捕获

括号 () 用于捕获捕获字符串的一部分。

示例 - 使用模式

main.lua

local text = "First 123 then 456."

-- 搜索任意数字序列
local start, finish = string.find(text, "%d+")
print("Digit sequence:", string.sub(text, start, finish)) -- 输出 Digit sequence: 123

-- 搜索字符串开头的模式
local start, finish = string.find(text, "^First")
if start then
  print("Sentence starts with 'First'") -- 输出 Sentence starts with 'First'
end

-- 搜索字符串结尾的模式
local start, finish = string.find(text, "%d+%$")
if not start then
  print("Sentence does not end with digits.") -- 输出 Sentence does not end with digits.
end

输出

运行上述程序时,我们将得到以下输出−

Digit sequence: 123
Sentence starts with 'First'
Sentence does not end with digits.