Lua字符串及字符串匹配

--lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……。

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

基本函数


函数


描述


示例


结果


len


计算字符串长度


string.len("abcd")


4


rep


返回字符串s的n个拷贝(repeat重复)


string.rep("abcd",2)


abcdabcd


lower


返回字符串全部字母大写


string.lower("AbcD")


abcd


upper


返回字符串全部字母小写


string.upper("AbcD")


ABCD


format


返回一个类似printf的格式化字符串


string.format("the value is:%d",4)


the value is:4


sub


返回子字符串substring from index i to j of s


string.sub("abcd",2)


bcd


string.sub("abcd",-2)


cd


string.sub("abcd",2,-2)


bc


string.sub("abcd",2,3)


bc


find


在字符串中查找,找到则返回匹配串开始索引和结束索引,否则返回nil。第三个参数是可选的:标示目标串中搜索的起始位置。


string.find("cdcdcdcd","ab")


nil


string.find("cdcdcdcd","cd")


1 2


string.find("cdcdcdcd","cd",7)


7 8


gsub


全局字符串替换

在字符串中替换(substitution替换),有三个参数:目标串,模式串,替换串。第四个参数是可选的,用来限制替换的范围


string.gsub("abcdabcd","a","z");


zbcdzbcd 2


string.gsub("aaaa","a","z",3);


zzza 3


byte


返回字符的整数形式,字符->数字


string.byte("ABCD",4)


68


char


将整型数字转成字符并连接,数字->字符


string.char(97,98,99,100)


abcd

基本模式串

正则表达式


字符类


描述


示例


结果


.


任意字符


string.find("",".")


nil


%s


空白符(space)


string.find("ab  cd","%s%s")


3 4


%S


非空白符


string.find("ab cd","%S%S")


1 2


%p


标点字符(punctuation)


string.find("ab,.cd","%p%p")


3 4


%P


非标点字符


string.find("ab,.cd","%P%P")


1 2


%c


控制字符(control)


string.find("abcd\t\n","%c%c")


5 6


%C


非控制字符


string.find("\t\nabcd","%C%C")


3 4


%d


数字(digit)


string.find("abcd12","%d%d")


5 6


%D


非数字


string.find("12abcd","%D%D")


3 4


%x


十六进制数字(hexadecimal)


string.find("efgh","%x%x")


1 2


%X


非十六进制数字


string.find("efgh","%X%X")


3 4


%a


字母(alpha)


string.find("AB12","%a%a")


1 2


%A


非字母


string.find("AB12","%A%A")


3 4


%l


小写字母(lowercase)


string.find("ABab","%l%l")


3 4


%L


大写字母


string.find("ABab","%L%L")


1 2


%u


大写字母(uppercase)


string.find("ABab","%u%u")


1 2


%U


非大写字母


string.find("ABab","%U%U")


3 4


%w


字母和数字


string.find("a1()","%w%w")


1 2


%W


非字母非数字


string.find("a1()","%W%W")


3 4

转义字符%


字符类


描述


示例


结果


%


转义字符


string.find("abc%..","%%")


4 4


string.find("abc..d","%.%.")


4 5

用[]创建字符集,"-"为连字符,"^"表示字符集的补集


字符类


描述


示例


结果


[01]


匹配二进制数


string.find("32123","[01]")


3 3


[AB][CD]


匹配AC、AD、BC、BD


string.find("ABCDEF","[AB][CD]")


2 3


[[]]


匹配一对方括号[]


string.find("ABC[]D","[[]]")


4 5


[1-3]


匹配数字1-3


string.find("312","[1-3][1-3][1-3]")


1 3


[b-d]


匹配字母b-d


string.find("dbc","[b-d][b-d][b-d]")


1 3


[^%s]


匹配任意非空字符


string.find(" a ","[^%s]")


3 3


[^%d]


匹配任意非数字字符


string.find("123a","[^%d]")


4 4


[^%a]


匹配任意非字母字符


string.find("abc1","[^%a]")


4 4

用"()"进行捕获


字符类


描述


示例


结果


()


捕获字符串


string.find("12ab","(%a%a)")


3 4 ab


string.find("ab12","(%d%d)")


3 4 12

模式修饰符


修饰符


描述


示例


结果


+


表示1个或多个,匹配最多个


string.find("aaabbb","(a+b)")


1 4 aaab


string.find("cccbbb","(a+b)")


nil


-


表示0个或多个,匹配最少个


string.find("zzxyyy","(xy-)")


3 3 x


string.find("zzzyyy","(x-y)")


4 4 y


*


表示0个或多个,匹配最多个


string.find("mmmnnn","(m*n)")


1 4 mmmb


string.find("lllnnn","(m*n)")


4 4 n


?


表示0个或1个


string.find("aaabbb","(a?b)")


3 4 ab


string.find("cccbbb","(a?b)")


4 4 b

时间: 2024-09-29 04:37:23

Lua字符串及字符串匹配的相关文章

数据结构之 字符串---字符串匹配(kmp算法)

串结构练习——字符串匹配 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定两个字符串string1和string2,判断string2是否为string1的子串. 输入 输入包含多组数据,每组测试数据包含两行,第一行代表string1,第二行代表string2,string1和string2中保证不出现空格. 输出 对于每组输入数据,若string2是string1的子串,则输出"YES",否则输出"NO". 示例输入

[算法系列之十四]字符串匹配之Morris-Pratt字符串搜索算法

前言 我们前面已经看到,蛮力字符串匹配算法和Rabin-Karp字符串匹配算法均非有效算法.不过,为了改进某种算法,首先需要详细理解其基本原理.我们已经知道,暴力字符串匹配的速度缓慢,并已尝试使用Rabin-Karp中的一个散列函数对其进行改进.问题是,Rabin-Karp的复杂度与强力字符串匹配相同,均为O(mn). 我们显然需要采用一种不同方法,但为了提出这种不同方法,先来看看暴力字符串匹配有什么不妥之处.事实上,再深入地研究一下它的基本原理,就能找到问题的答案了. 在暴力匹配算法中,需要检

正则表达式的使用,字符串提取,字符串匹配(C#语言)

在程序中常常设计字符串的处理,比如①:判断用户的输入字符串是否符合要求,是否是非法字符串,②:取出一个很复杂字符串的某一程序中需要的部分等 这事用自己写算法判断通常是十分困难的,所以遇到字符串的处理时要很快想到用正则表达式. 一:正则表达式元字符 •要想学会正则表达式,理解元字符是一个必须攻克的难关.不用刻意记 •.:匹配任何单个字符.例如正则表达式“b.g”能匹配如下字符串:“big”.“bug”.“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”. •[ ] :匹配括号中的

Step By Step(Lua字符串库) (转)

1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string.rep(s,n) 返回字符串s重复n次的结果:    3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变:    4). string.upper(s) 和lower相反,将小写转换为大写:    5). string.sub(s,i,j) 提取字符串s的第i个到第j个字符.Lua中,第一

Lua字符串库

Lua字符串库小集 1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string.rep(s,n) 返回字符串s重复n次的结果:    3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变:    4). string.upper(s) 和lower相反,将小写转换为大写:    5). string.sub(s,i,j) 提取字符串s的第i个到第j个

Lua字符串库(整理)

Lua字符串库小集 1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string.rep(s,n) 返回字符串s重复n次的结果:    3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变:    4). string.upper(s) 和lower相反,将小写转换为大写:    5). string.sub(s,i,j) 提取字符串s的第i个到第j个

Lua 字符串库函数总结

字符串库 注:字符串在Lua中是不可变的,任何的string操作都不会去改变原有的字符串,都是返回新的字符串 一.一般函数 1. 求长度 s = "Hello LUA "; print(string.len(s)); print(#s); 2. 重复 print(string.rep(s,3));   -- s 重复了3次 3. 大小写转换 print(string.upper(s)); print(string.lower(s)); -- 大小写的一个典型用途,假如要对一个字符串进行

uva:10340 - All in All(字符串匹配)

题目:10340 - All in All 题目大意:给出字符串s和t,问s是否是t的子串.s若去掉某些字符能和t一样,那么t是s的子串. 解题思路:匹配字符.t的每个字符和s中的字符匹配.注意这里的字符数组大小要开大点. 代码: #include <stdio.h> #include <string.h> const int N = 1000005; char s[N], t[N]; bool match () { int i = 0; int lens = strlen(s);

CCF 字符串匹配

问题描述 试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时,表示同一个字母的大写和小写看作相同的字符. 输入格式 输入的第一行包含一个字符串S,由大小写英文字母组成. 第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小