Lua 正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua 正则表达式相关的知识,希望对你有一定的参考价值。

参考技术A s : 需要进行查找的字符串
pattern : 需要匹配的正则表达式
init : 搜索的起始位置
plain : 默认为false,true时关闭匹配正则模式
将查找目标模板在给定字符串中出现的位置,找到返回起始和结束位置,没找到返回nil

s : 需要进行查找的字符串
pattern : 需要匹配的正则表达式
init : 搜索的起始位置
将查找目标模板在给定字符串中出现的匹配字符,如果没有,返回nil

s : 需要进行查找的字符串
pattern : 需要匹配的正则表达式
返回一个迭代器函数,每一次调用这个函数,返回一个在字符串s找到的下一个符合pattern描述的子串。

s : 需要进行查找的字符串
pattern : 需要匹配的正则表达式
repl : 需要替换成的字符串
[, m] : 只看s的前m个字符
将pattern中匹配到的字符串替换成repl字符串,repl可以是string,也可以是个函数,或是table,如果是函数,就会用捕获的内容作为参数调用该函数,将返回的内容作为替换字符串。如果是table,则用捕获的内容为key去取table的值来作为替换字符串,如果不存在,就不做替换
返回值 : 替换后的字符串, 替换的次数

Lua中字符串与模式匹配(正则表达式)

lua中字符串操作能力有限,通过字符串库(模块string)实现增强功能。



字符串基本操作

操作符(..)实现字符串的连接

string.len(s):返回字符串的长度

字符索引从前往后是1,2,...;从后往前是-1,-2,...


string库中所有的function都不会直接操作字符串,而是返回一个结果

  • string.lower(s):变小写.

  • string.upper(s):变大写.

  • string.rep(s,n):将s拷贝n份,并连接起来,返回.

  • string.sub(s,i [,j]):取s中从i开始到j为止的自字符串,默认j为长度;-i表示倒数



字符串查找

i, j = string.find(s, pattern[, start]) 

pattern:要查找的模式串或子串

找到返回匹配串开始和结束的位置;否则返回nil。


string.match(s, pattern[, start]) 

找到返回匹配的子串(或分组);否则返回nil

如:

string.match('2015-5-12 13:53', '%d+-%d+-%d+')

返回子串:2015-5-12

string.match('2015-5-12 13:53', '(%d+)-(%d+)-(%d+)')

返回分组:2015 5 12


string.gmatch(s, pattern) 返回一个迭代器

for k, v in string.gmatch('a=111,b=222', '(%w+)=(%w+)') do

     print(k, v) end

a 111

b 222



替换gsub

string.gsub(s, pattern, reps):使用reps替换pattern

string.gsub(s, pattern, func):对于每一个匹配,调用func函数


print(string.gsub("hello Lua", "(%w+) (%w+)", "%2,%1")) 

返回:Lua,hello

string.gsub("hello Lua; hello Lua; hello Lua", "(%w+) (%w+)", 

    function(first, second) do

        print(first,second)

    end



模式匹配

模式串中的特殊字符 ( ) . % + - * ? [ ^ $

  • '%' 用作特殊字符的转义字符

  • '%.' 匹配点;

  • '%%' 匹配字符 '%'


元字符

.  (点号)

任意字符
%a 字母
%c 控制字符
%d 数字
%l 小写字母
%p
标点符号
%s
空白符
%u
大写字母
%w
字母和数字
%x
十六进制
%z
代表0的字符

上面字符类的大写形式表示小写所代表的集合的补集。例如, '%A'非字母的字符


模式修饰符

  • + 匹配前一字符1次或多次

  • * 匹配前一字符0次或多次;最长匹配

  • - 匹配前一字符0次或多次;最短匹配

  • ? 匹配前一字符0次或1次

  • ^ 匹配字符串开头

  • $ 匹配字符串结尾


用'[]'创建字符集

  • '[%w_]' 匹配字母数字和下划线

  • '[01]' 匹配二进制数字

  • '[%[%]]'匹配一对方括号

  • 在'[]'中使用连字符'-'

  • '%d'    表示 '[0-9]';

  • '%x'    表示 '[0-9a-fA-F]'

  • '[0-7]' 表示 '[01234567]'

  • 在'[]'开始处使用 '^' 表示其补集:

    • '[^0-7]' 匹配任何不是八进制数字的字符;

    • '[^\n]' 匹配任何非换行符户的字符。

    • '[^%s]' == '%S'


以上是关于Lua 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

lua的一些正则表达式

Lua:字符串匹配和正则表达式

lua正则匹配中\t是啥意思?

Lua中的重复正则表达式

仅在 Lua 中使用正则表达式替换整个单词

lua 正则表达式,用于将关键字与 PHP 采用的值进行匹配