Lumesh Regex 模块

wiki libs

Lumesh 正则表达式模块使用文档

模块函数列表

使用help regex查看

功能说明

提供基于正则表达式的字符串处理能力,使用轻量级 regex_lite 库实现。所有函数支持两种调用方式:

  • 函数式调用regex.func(arg0, arg1...)
  • 命令式调用regex.func arg0 arg1...

函数列表及详细说明

1. regex.match

  • 功能:检查文本是否匹配正则模式
  • 参数
    • pattern: string - 正则表达式
    • text: string - 待匹配文本
  • 返回值:boolean - 匹配成功返回 true,否则 false
  • 示例
    # 检查数字匹配
    regex.match '\d+' '123' # => true
    regex.match '\d+' 'abc' # => false

2. regex.find

  • 功能:查找首个匹配项的位置和内容
  • 参数
    • pattern: string - 正则表达式
    • text: string - 待搜索文本
  • 返回值[start, end, text] | none
    • start: integer - 匹配起始索引(从0开始)
    • end: integer - 匹配结束索引
    • text: string - 匹配内容
    • 无匹配时返回 none
  • 示例
    regex.find '\d+' 'abc123def'
    # => [3, 6, '123']

3. regex.find_all

  • 功能:查找所有匹配项的位置和内容
  • 参数
    • pattern: string - 正则表达式
    • text: string - 待搜索文本
  • 返回值[[start, end, text], ...] - 匹配结果列表(可能为空)
  • 示例
    regex.find_all '\d+' '12a34b56'
    # => [[0,2,'12'], [3,5,'34'], [6,8,'56']]

4. regex.capture

  • 功能:提取首个匹配的捕获组
  • 参数
    • pattern: string - 含捕获组的正则表达式
    • text: string - 待搜索文本
  • 返回值[full, group1, group2, ...] | none
    • full: string - 完整匹配文本
    • groupN: string | none - 第N个捕获组内容(未匹配时为 none
  • 示例
    regex.capture '(\d+)-(\w+)' '123-abc'
    # => ['123-abc', '123', 'abc']

5. regex.captures

  • 功能:提取所有匹配的捕获组
  • 参数
    • pattern: string - 含捕获组的正则表达式
    • text: string - 待搜索文本
  • 返回值[[full, group1, ...], ...] - 所有匹配的捕获组列表
  • 示例
    regex.captures '(\d+)' 'a1b2'
    # => [['1'], ['2']]

6. regex.split

  • 功能:按正则模式分割文本
  • 参数
    • pattern: string - 作为分隔符的正则表达式
    • text: string - 待分割文本
  • 返回值[part1, part2, ...] - 分割后的子字符串列表
  • 示例
    regex.split '\s*,\s*' 'a, b, c'
    # => ['a', 'b', 'c']

7. regex.replace

  • 功能:替换所有匹配项
  • 参数
    • pattern: string - 正则表达式
    • replacement: string - 替换文本(支持 $n 捕获组引用)
    • text: string - 待处理文本
  • 返回值:string - 替换后的新字符串
  • 示例
    regex.replace '(\d+)' 'number:$1' '123 abc'
    # => 'number:123 abc'

8. regex.capture_name

  • 功能:提取命名捕获组
  • 参数
    • pattern: string - 含命名捕获组的正则(如 (?P<name>...)
    • text: string - 待搜索文本
    • names: boolean (可选) - 是否返回组名(默认 false
  • 返回值
    • names=false[group1, group2, ...] | none - 捕获组值列表(跳过索引0的完整匹配)
    • names=true[[name, value], ...] | none - 组名和值的配对列表
  • 示例
    # 返回组值
    regex.capture_name '(?P<num>\d+)(\w+)' '123abc'
    # => ['123', 'abc']

    # 返回组名和值
    regex.capture_name '(?P<num>\d+)(\w+)' '123abc' true
    # => [['num', '123'], [none, 'abc']] // 未命名组显示为 none

通用注意事项

  • 正则语法:遵循 regex_lite 规范(轻量级 PCRE 子集)
  • 转义处理:在 Lumesh 字符串中需双写反斜杠(如 \d 表示数字)
  • 错误处理
    • 参数非字符串时抛出错误
    • 无效正则模式时抛出错误
  • 索引规则:所有位置索引均从 0 开始(左闭右开区间)

正则表达式语法参考

遵循标准正则表达式语法,特殊字符需转义:

字符 含义 示例
. 任意字符 a.c 匹配 “abc”
\d 数字 [0-9] \d+ 匹配 “123”
\w 单词字符 [a-zA-Z0-9_] \w+ 匹配 “var1”
\s 空白字符 a\sb 匹配 “a b”
* 0次或多次 a*b 匹配 “b”, “ab”, “aab”
+ 1次或多次 a+b 匹配 “ab”, “aab”
? 0次或1次 a?b 匹配 “b”, “ab”
{n} 恰好n次 a{3} 匹配 “aaa”
^ 字符串开始 ^a 匹配以a开头的字符串
$ 字符串结束 a$ 匹配以a结尾的字符串
[…] 字符集合 [aeiou] 匹配任意元音字母
[^…] 非字符集合 [^0-9] 匹配非数字字符
`a
() 分组 (ab)+ 匹配 “abab”

注意:在双引号字符串中需对反斜杠进行转义,例如\d应写为"\\d", 单引号中无需转义:'\d'

高级用法

性能建议

  1. 对于重复使用的正则表达式,使用new预编译并存储结果。
  2. 优先使用find而非match当只需要部分匹配时。
  3. 对于简单字符串操作,考虑使用字符串函数而非正则表达式。

错误处理

  • 所有函数都会验证参数数量和类型。
  • 无效的正则表达式会返回描述性错误。
  • 不匹配的情况通常返回None而非错误。