Lua基础(六)字符串

一   基础了解

1)字符串用于表示'文本'

2)标准:使用'UTF-8'来存储Unicode"字符串"

3)Lua5.3提供了一个使用'UTF-8'编码的'函数库'

二  字符串

(1)字符串是不可变

特点:如果要'修改'一个字符串,则需要'重新创建'一'新'的字符串

重点:lua '自动管理'字串内存的释放字面字符串,使用'单引号'或'双引号'括起来的字符串

(2)字符串表示

单引号和双引号的唯一'区别':

  1)使用双引号声明的字符串中'出现单引号时',单引号可以'不用转义'

     "I'am wzj"

  2)使用单引号声明的字符串中'出现双引号时',双引号'不用转义'

     '"Hello Lua"'

强调: '代码风格'尽量使用'同一种风格'

(3)获取字符串的长度

'#' + '字符串'

(4)连接操作符

连接操作符:'..'

(5)Lua语言中字符串支持的C语言风格的转义字符

(6)长字符串

用一对双括号'[[]]'表示长'多行'字符串

备注:如果多行字符串的'第一个字符'是'换行符',那么换行符会'被忽略'

备注1:最后一行的'换行符'不会省略

(7)强制类型转换

说明:Lua语言在运行时提供了"数值"和"数值字符串"之间的自动转换

针对'字符串的所有算术操作符'会尝试将字符串'转换为数值'

(8)显示转换

说明:为了增强程序的'可读性',可以显示的将"数字字符串"尝试转化为'整数'

说明:指明'任意进制'的转换

tonumber("number",n)

(9)将数值转换为字符串

形式:tostring(number)

(10)注意事项

'比较操作符'不会对'操作数'进行'强制'类型转换

 比较操作符号:>,'<',~=,'>=',<=

 "2" < '15'为假 --> 按照'字母顺序'排列

++++++++++++++++'分割线'++++++++++++++++

注意:如果比较操作符'混用'字符串和数值,Lua语言会'抛出异常'

2 < "15" -->'报错'

三  字符串标准库

(1)len

string.'len(arg)'

计算字符串'长度'-->等价方式:'#arg'

(2)rep

string.'rep(string, n)'

备注:rep-->repate-->'重复'

功能:返回字符串string的'n个拷贝'

说明:将字符串string'重复n次'

需求:创建'1MB大小'的测试字符串

1M=1024KB=1024*1024B=2^10*2^10='2^20'B

1B=1Byte='8bit'

备注:Byte-->'字节';bit-->'位'

例子: string.rep('a,'2^20)

+++++++++++++'分割线'+++++++++++++

01000001('二进制')-->'8位'-->65-->'ASCII码'-->'A字符'

(3)reverse

string.'reverse(str)'

字符串'反转'

(4)大小写转换

string.upper(str)  -->'转换为大写'

string.lower(str)  -->'转换为小写'

字符串'大小写转换'

(5)sub

需求: 去掉'两端'的'第一个'字符

string.sub(s,2,-2)

实际理解:返回的是去掉字符串's'中的第一个和最后一个字符

++++++++++'注意事项'++++++++++

Lua语言中的'字符串是不可变':函数string.sub'不会改变'原有字符串的值,只是'返回一个新字符串'

修改'原字符串': s = string.sub(s,-2,-2)

(6)char

ASCII

-- 整数 ASCII 码'转换为'字符

string.char(number)

说明:'number'必须是字符对应的'ASCII码'

+++++++++++++++++'ASCII的最大值和最小值'+++++++++++++++++

常见ASCII码的'大小规则':0~9<A~Z<a~z

(7)byte

string.byte(s[,int])

功能:byte 将字符串中的'字符'转化为对应的'ASCII码'-->整数值

特点:返回字符串's'中第'i个字符'的内部数值

备注:如果'不指定'某个字符,默认'第一个'字符

说明:返回'索引i到j之间'-->[i,j]的'所有字符'的数值表示

(8)format

指示符--> 由一个百分号'%'和一个代表'格式化方式的字母'组成

备注:每一个指示符都会被'替换'为使用对应格式'进行格式化的对应参数'

+++++++++格式化字符串的'指示符'与'C语言中的函数printf'的规则类似+++++++++

'
格式控制符'-->'以%开头',常用的有以下几种:

1)%s    -  接受一个字符串并按照'给定的参数'格式化该字符串

2)
%d    -  接受一个数字并将其转化为'有符号的整数'格式

3)
%f    -  接受一个数字并将其转化为'浮点数格式'(小数),默认'保留6位'小数,不足位用'0填充'

4)
%x    -  接受一个数字并将其转化为'小写的十六进制'格式

5)
%X    -  接受一个数字并将其转化为'大写的十六进制'格式

+++++++++++++++++++++'扩展'+++++++++++++++++++++

 %s '空白符'
 %p 标点
 %c 控制字符
 %z 代表0的字符
 %a '字母'
 %l 小写字母
 %u 大写字母
 %w '字母数字'

细节: 在'百分号和字母之间'可以包含用于'控制格式细节'的选项-->'注意位置'

例如:%.4f-->'保留4位小数'、%02d-->'十进制'至少由两个数字'组成,'不足'两个数字'用0补齐'、%2d-->'表示用空格来补齐'

(9)模式匹配的函数

参考博客

string.find (str, substr, [init, [end]])

在一个'指定的目标字符串'中'搜索'指定的内容(第三个参数为'索引'),返回其'具体位置'

备注:如果'没有找到-->不存在',则返回 nil

++++++++++++++'分割线'++++++++++++++

1)string.find '默认'情况下'返回两个值',即查找到的子串的'起止'下标,如果不存在匹配'返回 nil'

2)如果我们只想要 string.find 返回的第二个值, 可以使用 '虚变量'(即'下划线')省略

子串匹配 

(10)gsub

高级扩展

gsub常用正则参考

string.'gsub'函数的'返回值'有两个

  1)第一个是返回'匹配后的字符串'-->'不匹配'的话返回'原字符串拷贝'

  2)第二个是'匹配的次数'-->'替换的次数'

备注:string.gsub函数'不会改变'原字符串,只是'拷贝操作'

①   语法

②  pattern 模式串可用的正则

匹配的模式

lua中的正则​​​​​​​

③  字符串

④  函数形式  高级

⑤  table形式

gsub模拟trim

(10)math

openresty:string.match 目前并'不能被 JIT 编译',应 尽量 使用 ngx_lua 模块提供的 'ngx.re.match' 等接口

 ①  案例1

local string = "{1,2,3,4}"

local to_string=string.match(string , "%d+,%d+,%d+,%d+")

# 此时tranString = "1,2,3,4",去掉"{","}"

++++++++++  "分割线"  ++++++++++

//'\d'表示数字 \d+表示'最长(贪婪)'匹配多个数字
var v = string.match("abcd1234", "\d+");

# 显示v等于"1234"

思考:'\d'和'%d'的区别?

②  案例2

var v,v2 = string.match("abcd", "(ab)(cd)");

# 效果:显示v等于"ab" v2等于"cd"

// 如果"不显示"的用'括号'指定捕获,函数将"捕获整个"匹配模式

+++++++++  "匹配超链接"  +++++++++

string.match(content,'%a+%:%/%/%w[%w-]*[%.%w*]+%.?')

(11)gmatch

openresty:此函数目前并'不能被 LuaJIT 所 JIT 编译',而只能被解释执行。应 尽量 使用 ngx_lua 模块提供的 ngx.re.gmatch 等接口。

参考demo

①  普通

②  for循环

③  捕获场景

lua5.3参考手册

云风大佬的博客

四    编码

ASCII、字节、字符、UTF-8、二进制、Unicode、编码、解码

字符:'计量'单位

字符:使用数字、字母、符号、汉字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值