aardio 文档

string 库模块帮助文档

string 成员列表

字符串函数库

字符串函数库
这是自动导入的内置库,
使用手册相关文档

string.bytes

将字符记数转换为字节计数

string.bytes(字符串,字符数,开始位置)

将字符记数转换为字节计数
可选用参数@3指定开始位置,此参数以字节为单位,首字节开始为1
如果遇到不合法的UTF8编码函数返回0

string.charAt

返回UTF8编码的文本指定位置的字符,
一个字符可能包含多个字节

注意UTF8属变长编码,因此每次调用此函数都需要从文本开始计算字符位置,
如果需要遍历所有字符,可使用string.split一次性拆分字符到数组,
或调用string.toUtf16转换为UTF16字符串后再处理

string.charAt(字符串,字符位置)

省略字符位置时默认值为1,1表示第1个字符,
按字符计数而不是按字节计数,支持编码大于0x10000的字符

string.charCodeAt

返回UTF8编码的文本指定位置字符的Unicode编码,
一个字符可能包含多个字节

注意UTF8属变长编码,因此每次调用此函数都需要从文本开始计算字符位置,
如果需要遍历所有字符,可使用string.split一次性拆分字符到数组,
或调用string.toUtf16转换为UTF16字符串后再处理

string.charCodeAt(字符串,字符位置)

省略字符位置时默认值为1,1表示第1个字符,
按字符计数而不是按字节计数,支持编码大于0x10000的字符

string.cmp(字符串,字符串2,比较长度)

 参数可以是字符串或 buffer
文本模式比较字符串前n个字符串大小,忽略大小写,忽略区域设置,
从第一个字符开始比较,不相等或不支持比较的数据类型返回非0值,
字符串1较大返回正数,字符串2较大返回负数
比较长度是可选参数,默认为字符串长度
仅比较纯文本,忽略'\0'以后的内容

string.cmpMatch( ,"字符串参数" )

使用完全匹配比较字符串,忽略大小写,相同返回 true。
否则使用模式匹配搜索子串,忽略大小写,找到返回 true。
改用 string.indexOf 函数可禁用模式匹配查找子串。

string.collate(字符串,字符串2)

比较字符串,大小写敏感,相等返回0,
字符串1较大返回正数,字符串2较大返回负数,
排序受区域影响,使用setlocale函数改变区域设置
该函数需要转换为UTF16比较,性能不及使用大于、小于等操作符直接比较字符串

string.concat('字符串','字符串',...)

拼接并返回字符串,支持任意个参数,
允许参数中有null值,所有参数为null或无参数时无返回值,
二进制模式拼接,不会被'\0'截断

string.concat(buffer,'文本字符串',...)

文本模式追加字符串到 buffer,buffer 请使用 raw.buffer 函数创建,
如果需要使用二进制模式拼接字符串到 buffer,请使用 raw.concat() 函数

可以追加任意个数的字符串参数,字符串参数也可以是null值。
仅拼接'\0'以前的纯文本,超出 buffer长度的内容将被丢弃。

string.concatUtf16(str,...)

将所有参数转换为 UTF-16 字符串并连接后返回。
参数可以是数值,字符串,UTF-16 编码字符串。
忽略 null 值参数

string.crc32(字符串,crc32,长度)

计算字符串的CRC32校验值
参数一也可以是 buffer,
可选使用参数@2指定前面字符串的校验值,以返回总的校验值
长度为可选参数

string.crlf(字符串,回车换行,合并空行数)

自动调用 tostring 函数转换传入参数 @1 为字符串。
此函数格式化参数 @1 的回车换行或单独的回车换行符为参数 @2 指定的换行标记。
参数 @2 默认为 '\r
',如果改为为 '
' 则格式化为单个换行符。
可选用参数 @3 指定合并空行后保留的空行数,省略则不合并。

注意字符串字面值解析换行的规则:
双引号或反引号内字符串只有换行没有回车,
单引号内字符串解析时忽略所有回车换号,
使用/*块注释*/包含字符串则总是将换行规范解析为回车换行组合

string.each

创建适用于 for in 语句的迭代器,
用于分行匹配字符串,
可将返回迭代器传入 table.array 生成数组

string.each(字符串,模式串,行分隔符)

必须使用参数@2指定模式串,
查找模式串中可用圆括号创建捕获分组自定义迭代器返回值个数,
行分隔符支持模式匹配语法,可省略

string.endWith("字符串","结束串")

判断结束串是否位于字符串结束处
基于二进制模式

string.endWith("字符串","结束串",true)

判断结束串是否位于字符串结束处。
基于文本模式,忽略大小写

string.escape

转义字符串中需要转义的字符
使用string.unescape函数可以还原转义

string.escape(字符串)

返回转义字符串,如果字符串不需要转义返回null
如果参数@1指定 buffer,即使不需要转义也会返回字符串而不是null

string.escape(字符串,兼容JSON,Unicode编码)

返回转义字符串,如果字符串不需要转义返回 null,
如果参数@1指定 buffer,即使不需要转义也会返回字符串而不是null,
如果参数@2为true,即使字符串不需要转义也会返回字符串而不是 null
兼容 JSON 时参数1 应当是 UTF8、或 UTF16 编码文本,单引号转为\u0027,
Unicode 编码为 true 时所有非 ASCII 字符使用 \uXXXX编码

注意即使选择了不启用 UNICODE 编码,单引号,
以及一些可能无法直接显示的 Unicode 字符仍然会进行转义

string.expand

重复替换直到找不到匹配,
可用于展开字符串中的环境变量

string.expand(字符串,查找模式串,替换函数)

在字符串中重复执行替换操作,
直到参数@2指定的模式串找不到匹配,
省略参数@2,@3则默认展开百分号包含的进程环境变量
可用于展开文件路径中的环境变量
注意即使替换函数返回null,此函数仍然会替换为空串,
如果替换结果为空字符串,此函数返回 null

string.find

使用模式串在字符串中查找子串的位置,
如果有多个捕获分组,将附加为多个返回值。
如果只是查找普通查找建议使用string.indexOf函数。
类似的函数 raw.find 可以支持在内存指针中查找字符串

string.find("字符串","@查找文本",开始位置,返回值以字符计数)

返回匹配结果的起始,结束位置
查找文首字符为'@'或'@@'禁用模式语法
首字等为'@'可选指定返回位置以字符计数
@@则是<@@...@>的缩写形式,忽略大小写查找

string.find("字符串","模式",开始位置)

开始位置为可选参数,默认为1,必须以字节计数,
函数返回匹配结果的起始,结束位置,以及所有捕获分组

string.format("%", )

首参数内每个%符号后是一个格式化字符,
每个格式化字符按对应顺序格式后续参数

详细用法请参考
格式化字符串

string.fromCharCode()

使用1个或多个 Unicode 编码值转换为 UTF-8 字符串
参数可以指定1个或多个Unicode编码数值,可指定大于0x10000的编码,
不可直接传入数组作为参数

string.fromUtf16

将参数 @1 指定的字符串字符串自 UTF-16 编码转换为指定编码,默认转为 UTF-8,
如果参数 @1 是一个字符串,并且已存在 UTF 编码标记,
则根据 UTF 标记进行优化并避免不必要的转换或错误转换。
如果出现错误转换,请注意检查源数据是否被添加了错误的 UTF 标记

string.fromUtf16(字符串)

从 UTF-16 编码还原到 aardio 字符串默认的 UTF-8编码。
注意 aardio 中 UTF16 默认指的是 UTF16 LE,代码页为 1200

string.fromUtf16(字符串,目标编码)

从 UTF-16 编码还原到指定编码
目标编码编码参数是表示代码页的数值,省略则默认为 65001(UTF-8 代码页)。
注意aardio中Unicode指的UTF16 LE,代码页为1200
aardio字符串默认为UTF8编码

string.fromUtf16(字符串,目标编码,转换字符数)

显示定转换转换字符数参数时,
可允许第一个参数为指针、或 buffer对象,
参数@3以字符计数,即2个字节为一个单位,
目标编码参数需要指定一个表示代码页的数值,例如 65001 为 UTF-8 代码页。
字符数为 -1 表示查找'\u0000'终止符获取可打印文本长度。
字符数只能为数值。

string.fromUtf16If(字符串)

如果是 UTF16 字符串转换到 UTF-8 代码页,否则直接返回。
使用字符串的 UTF 标记判断 UTF-16 字符串,不检测实际编码

string.fromto

转换传入文本字符串编码并返回转换后的字符串,
此函数先调用 string.toUtf16,再调用 string.fromUtf16,
fromto 函数名源于这两个函数的前缀。

string.fromto(内存指针,源编码,目标编码,转换字节数)

转换传入文本字符串编码并返回转换后的字符串,
编码参数请指定表示代码页的数值,例如 65001 为 UTF-8 编码的代码页。
参数 @4 为可选用一个数值指定需要转换的文本所占内存字节数,
字节数为-1时表示查找'\0'终止符自动获取长度。
指定转换字节数时,参数 @1 即可使用指针、buffer作为参数。
注意即使指定 UTF-16 代码页,参数 @4 仍然是以字节计数

string.fromto(字符串,源编码,目标编码)

转换传入文本字符串编码并返回转换后的字符串,
编码参数请指定表示代码页的数值,例如 65001 为 UTF-8 编码的代码页。
目标编码默认为 0 ,即系统默认代码页。
源编码为可选参数,默认为 UTF-8 代码页 65001。
如果字符串已存在UTF标记,则忽略源编码参数
UTF16 LE代码页为1200,UTF 16 BE代码页为1201

string.getUtf()

获取字符串的UTF格式标记,返回值如下:
&16 表示双字节编码的UTF-16编码
&8 表示UTF-8字符串,
&(8 | 1) 表示UTF-8、ANSI兼容编码,即所有字符小于0x80

对于空字符串,aardio忽略其UTF标记,
对于非空字符串,aardio只允许一个字符串对象在创建时初始化UTF标记为UTF16,
而其他字符串,允许在运行时修改UTF标记

string.getenv("变量名")

读取当前进程环境变量
成功返回字符串,失败返回 null

string.gfind(字符串,模式串,开始位置)

for i,j,group1  in string.gfind( /*查找字符串*/,"(.)") { 

}

string.gmatch(str,pattern)

for m in string.gmatch( ,"./*指定模式串,  
用于在参数@1指定的字符串中循环全局搜索符合条件的字符串,  
有几个匹配分组迭代器返回几个值,  
注意表达式不能以^开始*/") {   

}

string.hex

以十六进制编码字符串

string.hex(字符串,前缀,'\x80')

以十六进制编码字符串中的所有非ASCII字符 - 字节码大于等于'\x80'的字节(汉字等),
前缀可省略,默认为\x,

string.hex(字符串,前缀,忽略字符串)

以十六进制编码字符串,前缀可省略,默认为\x,
忽略字符串指定忽略不转换的字符,不指定则编码所有字节
指定了任意忽略字符,都会忽略ASCII大小写字母以及ASCII数字

string.indexAny

在字符串内搜索任意单字节字符。

string.indexAny(字符串,查找字符串)

在参数 @1 指定的字符串内查找参数 @2 指定的字符串中的任意一个单字节。
参数 @2 也可以是数值字节码。
参数@2 可包含 '\0' 或指定为 0,'\0'#

string.indexAny(字符串,查找字符串,开始位置)

在参数 @1 指定的字符串内查找参数 @2 指定的字符串中的任意一个单字节,
参数 @2 也可以是数值字节码。
参数@2 可包含 '\0' 或指定为 0,'\0'#

string.indexOf

纯文本搜索,
类似的函数 raw.indexOf 支持以二进制直接使用指针搜索内存

string.indexOf("字符串","查找文本")

返回查找文本所在起始索引,结束索引。
字符串如果包含'\0'时仅取'\0'之前的纯文本
禁用模式匹配

string.indexOf("字符串","查找文本",开始位置,结束位置)

返回查找文本所在起始索引,结束索引
字符串如果包含'\0'时仅取'\0'之前的纯文本
禁用模式匹配

string.isUtf16()

判断参数是否标记为 UTF-16 编码的字符串。
此函数仅检测 UTF 标记,不会分析实际编码。
'在 aardio 转义字符串中附加 u 后缀创建 UTF-16 编码的字符串'u
有编码转换功能的函数也会自动设置 UTF 标记。
注意 UTF16 在 aardio 中特指 UTF16 LE,代码页为 1200。

string.isUtf8()

快速检测字符串是否包含UTF8编码
空字符串返回null

string.join(字符串数组,"分隔字符串",开始索引,结束索引)

将字符串数组使用指定的分隔符合并为一个字符串。
即使传入空数组至少也会返回空字符串而非 null。
参数@1如果是包含 buffer 的数组则不应使用此函数,而应改用 raw.join 函数。
起始索引与结束索引为可选参数,可传入负数表示自数组尾部倒计数

string.lastIndexAny(字符串,查找字符串)

自尾部向前查找参数 @2 指定的字符串中的任意一个字节。
参数 @2 也可以指定数值字节码。
参数@2 可包含 '\0' 或指定为 0,'\0'#

string.lastIndexAny(字符串,查找字符串,开始位置)

自尾部向前查找参数 @2 指定的字符串中的任意一个字节。
参数 @2 也可以指定数值字节码。
参数@2 可包含 '\0' 或指定为 0,'\0'#

string.lastIndexOf

从右侧反向搜索字符串,禁用模式匹配。
这个函数需要从尾部逐个字符反向查找,效率较低

string.lastIndexOf("字符串","查找子串",搜索范围)

从右侧反向搜索字符串。
此函数为二进制搜索,搜索内容可包含'\0',禁用模式匹配
搜索范围仍然是自左向右(尾部)按字节计数,负数为反向计数。
返回值仍为左向右(尾部)按字节计数。

string.left(str,n )

从字符串左侧截取n个字符,
n为负数表示自左侧截取到右侧倒计数的指定字符,
按字节计数,汉字为多个字节
参数@1也可以是 buffer 对象

string.left(str,n,true)

从字符串左侧截取n个字符
按字符计数,汉字为一个字符
参数@1也可以是 buffer 对象

string.len

如果字符串是合法的UTF8编码,返回字符计数,否则返回0

string.len(字符串,起始字节位置,结束字节位置)

如果字符串是合法的 UTF-8 编码,返回字符计数,
参数@2,@3都是可选参数,以字节而非字符为单位
起始位置默认为1
结束位置默认为-1

string.lines

创建用于for in 语句的迭代器按行拆分字符串。
可用模式串自定义行分隔符,此函数与 string.splitEx 函数使用相同的拆分规则。

可将返回迭代器传入 table.array 生成数组。
按行读取文件请使用 io.lines 函数。

string.lines(字符串,行分隔符,列分隔符,最大列数)

按行拆分参数 @1 传入的字符串,传入 null 或空串字符串忽略不操作。
可选用参数 @2 自定义行分隔符,支持模式匹配语法。
可选用参数 @3 自定义列分隔符,支持模式匹配语法。

所有分隔符模式串可用括号创建捕获组,首个捕获组如下处理:
- 模式串尾部有 $ 符号,则捕获组放到上个拆分结果尾部。
- 模式串头部有 ^ 符号,则捕获组放到下个拆分结果头部。
- 模式串头部有^ 符号尾部有 $ 号则捕获组本身拆分为一个单位。
如果返回行分隔符,则迭代器的第 2 个循环变量为 true。

可选用参数 @4 限定最大拆分列数目。

如果不指定列分隔符则循环返回字符串,否则返回列数组。

string.load

读取文件或内嵌资源文件,返回普通字符串
如果文件以UTF16 LE BOM开始,并且长度为2的倍数时,读入为Unicode(UTF16)字符串

注意,此函数以启用共享读写模式打开文件

string.load("文件路径")

读取文件或内嵌资源文件,返回普通字符串

路径首字符可用斜杠表示应用程序根目录,用~加斜杠表示EXE根目录
如果~\~/开头的EXE根目录路径不存在,自动转换为应用程序根目录下的路径重试

string.load(资源名,资源类型,dll句柄)

读取文件或内嵌资源文件,返回普通字符串
资源名,资源类型都可以是字符串、或小于0xFFFF的数值或指针
参数三是dll句柄,默认为_HINSTANSE
除参数一以外,其他参数可选

string.loadBuffer

读取文件或内嵌资源文件,返回 buffer

注意,此函数以启用共享读写模式打开文件

string.loadBuffer("文件路径")

读取文件或内嵌资源文件,返回 buffer,

路径首字符可用斜杠表示应用程序根目录,用~加斜杠表示EXE根目录
如果~\~/开头的EXE根目录路径不存在,自动转换为应用程序根目录下的路径重试

string.loadBuffer(资源名,资源类型,dll句柄)

读取文件或内嵌资源文件,返回 buffer,
资源名,资源类型都可以是字符串、或小于0xFFFF的数值或指针
参数三是dll句柄,默认为_HINSTANSE
除参数一以外,其他参数可选

string.loadcode

加载并执行 aardio 代码或文件,返回 HTML 模板输出的 HTML 代码
如果当前应用未定义 response 对象,请使用 print 函数替代。
此函数也可以用于非 HTML 格式的任意字符串模板,
但非 HTML 格式的字符串开始部分必须是 aardio 模板标记

string.loadcode("代码文件",...)

加载并执行 aardio 代码或文件,
返回 HTML 模板输出的 HTML 代码,失败返回空值,错误信息。
参数@1,与 loadcode 函数相同,其他参数作为模板参数传给被调用的文件,
在被调用文件的函数外部可使用 owner 参数获取首个模板参数,
也可以使用...获取多个模板参数

string.lower()

字符串转换为小写

string.map

搜索并返回搜索结果数组,
并调用映射函数转换数组中的每个匹配结果为新的值,

注意如果模式串中使用括号指定了多个分组,
映射函数会有多个对应的回调参数

string.map(字符串,模式,映射函数)

参数@1指定要查找的字符串,
参数@2可以指定模式串,或包含多个表达式的数组,
省略则默认为[-\d]+,并且参数@3的默认值会被更换为tonumber
可选用参数@3指定映射函数,

返回值为匹配的字符串数组,如果有多个捕获分组则返回二维数组
如果参数@2不是数组而是表,则返回相同结构的表,
每个键对应的值更新为参数表中同名键指定的模式串的匹配结果。

string.match

使用模式串在字符串中查找子串,
类似的函数raw.match可以支持在内存指针中查找字符串

string.match("字符串","模式串",开始位置)

使用模式串在字符串中查找子串,
参数@1指定目标字符串,参数@2指定查找模式串。
参数@3可选,用于指定起始位置,负数表示尾部倒计数,
返回匹配字符串,如果使用了匹配分组则返回多个对应的匹配串,
返回值的顺序对应模式串中左圆括号的开始顺序

string.matches("字符串","模式串")

全局匹配并将匹配结果返回为数组
每次匹配成功的多个返回值存为成员数组
即使没有匹配到任何结果,也会返回一个空数组

string.pack(chr,chr2)

参数为零个或多个字符的ascii码数值
str = string.pack('A'#,'B'#,'C'#)
也可以是一个包含字节码的数组,例如:
string.pack( {'A'#,'B'#,'C'# } )

string.random(len)

生成随机字符串(字母、数字)

string.random(len,"中文字符集")

生成随机字符串,并指定随机字符集

string.random(str,str2,str3)

参数为多个字符串,函数随机返回其中一个字符串

string.reduce

使用string.match依次匹配多个模式串,逐步缩减并返回最终匹配结果

string.reduce(字符串,模式,...)

参数@1指定要查找的字符串,
参数@2开始指定一个或多个模式串,
使用前面一个的匹配结果作为后面一次匹配的条件,
逐步缩减并返回最终匹配结果,
也可以在参数@2中使用一个数组指定多个模式串

string.removeBom(字符串)

如果字符串开始为UTF8 BOM,则返回移除该 BOM 的字符串。
如果字符串开始为 UTF-16 BOM,则移除 BOM 并返回转换为 UTF-8 编码的字符串,
否则直接返回参数

string.repeat(n)

创建长度为n的字符串,默认填充所有字节的字节码设为 0 。

string.repeat(n," ")

将参数2重复n次并创建新的字符串返回

string.repeat(n,' ')

将参数2重复n次并创建新的字符串返回

string.replace

替换字符串,此函数不会改变原字符串,而是返回替换后的新字符串
此函数有两个返回值,第二个返回值为替换次数

string.replace("字符串","@查找字符串","替换字符串",替换次数)

禁用模式匹配替换,
在查找串中用模式匹配语法,替换字符串反斜杠也仅仅表示字面值不再表示匹配分组,
@@开始则是<@@...@>的缩写形式,忽略大小写查找
替换次数省略则全局替换

string.replace("字符串","模式串",替换函数,替换次数)

使用模式匹配在字符串中查找替换
替换回调函数返回需要替换的新字符串,不返回值则保留原字符串
有几个匹配分组就有几个回调参数

替换次数省略则全局替换
返回值为替换后的新字符串

string.replace("字符串","模式串",替换字符串,替换次数)

使用模式匹配在字符串中查找替换
替换字符串,可使用 \1\9引用匹配分组,\0表示匹配到的完整字符

替换次数省略则全局替换
返回值为替换后的新字符串

string.replace("字符串","模式串",替换表,替换次数)

使用模式匹配在字符串中查找替换
替换表对象中键为匹配到的字符串,替换值可以是字符串、数值、函数、false
其中数值转换为字符串返回,false表示取消替换,
函数用于接收匹配结果并返回新字符串,有几个匹配分组就有几个回调参数

string.repline

按行替换字符串,返回替换后的字符串,
此函数仅返回替换后的新字符串,只有一个返回值

string.repline(源字符串,模式串,替换串,替换次数)

模式串用于匹配所有的单行文本,
替换串与 string.replace 用法相同
替换次数指的也是每一行内部进行替换的最大次数,不指定则不限制

string.repline(源字符串,模式串,替换函数,替换次数)

模式串用于匹配所有的单行文本,
替换函数与 string.replace 用法相同
,
替换次数指的也是每一行内部进行替换的最大次数,不指定则不限制

string.repline(源字符串,模式串,替换表,替换次数)

模式串用于匹配所有的单行文本,
替换表与 string.replace 用法相同
,
替换次数指的也是每一行内部进行替换的最大次数,不指定则不限制

string.reverse('字符串')

字节序反转排列

string.reverse('字符串',true)

将字符串倒序排列
以字符为单位,参数必须是以UTF8编码的文本字符串,
返回值同样是UTF8编码,注意aardio中文本字符串默认的编码为UTF8

string.right(str,n )

从字符串右侧截取n个字符,
n为负数表示自左侧计数起始位置,并向右截取剩余字符,
按字节计数,汉字为多个字节
参数@1也可以是 buffer 对象

string.right(str,n,true )

从字符串右侧截取n个字符
按字符计数,汉字为一个字符
参数@1也可以是 buffer 对象

string.save("字符串参数", )

保存字符串到文件
如果父目录尚未建立,将自动创建父目录
写入文件成功返回true,否则返回false,错误信息
如果文件存在隐藏属性,可能会写入失败,错误信息返回"No Error"

注意,此函数以启用共享读写模式打开文件

string.save("字符串参数", ,true)

追加字符串到文件
如果父目录尚未建立,将自动创建父目录

注意,此函数以启用共享读写模式打开文件

string.search(回调函数,字符串,模式串,...)

模式匹配搜索.

可以指定1个或多个模式串,
此函数使用前面表达式的结果作为后面表达式的查询字符串,
每一个模式串都支持全局搜索并可以返回多个匹配结果,
最后一个表达式的匹配结果作为参数回调参数@1指定的函数.

每一个模式串参数都可以使用函数或 lambda表达式替代,
用于作为筛选器筛选上次的匹配结果,筛选器可以返回新的字符串,
返回非字符串类型则用于指定是否保留上次的匹配结果,

如果参数@1是一个数组,则将匹配结果添加到该数组,如果有多个捕获分组则返回二维数组,
如果参数@1是数组则返回该数组,否则函数无返回值

string.setUtf

设置字符串的UTF格式标记
该标记主要由aardio自动设置,一般不建议用户调用该函数

对于空字符串,aardio忽略其UTF标记,
对于非空字符串,aardio只允许一个字符串对象在创建时初始化UTF标记为UTF16,
而其他非UTF16字符串,允许在运行时修改UTF标记,
此函数并不会改变字符串数据,也没有返回值

string.setUtf("字符串",编码格式)

设置字符串的UTF格式标记,所有UTF格式标记如下:
0 表示普通字符串,
&8 表示UTF-8字符串,
&16 表示 UTF-16 字符串(ustring)。
&(8 | 1) 表示UTF-8、ANSI兼容编码,即所有字符小于0x80

此函数只能用于标记除UTF16以外的编码。
不能使用此函数修改字符串的UTF标记为UTF16编码,
也不允许使用此函数修改已经标记为UTF16编码的字符串。

aardio会自动维护UTF16字符串的编码标记,
使用string.sliceUtf16函数也可以获取UTF16标记的字符串

string.setenv("变量名","变量值")

设置当前进程环境变量
参数@2为 null 或省略则删除参数@1指定的环境变量

string.slice(str,i,j )

从字符串中截取位置i到j的字符串,
注意i使用1表示第一个字符,返回字符串包含j指字的最后一个字符,
按字节计数,汉字为多个字节,如果i,j为负数则从右侧倒数计数
省略参数j则默认值为截取到字符串尾部

参数@1也可以是 buffer 对象

string.slice(str,i,j,true )

从字符串中截取位置i开始的字符串,
注意i使用1表示第一个字符,返回字符串包含j指字的最后一个字符,
按字符计数,汉字为一个字符,如果i为负数则从右侧倒数计数
省略参数j则默认值为截取到字符串尾部,

参数@1也可以是 buffer 对象

string.sliceUtf16

截取 UTF-16 字符串,
也可用于为字符串添加 UTF-16 标记

string.sliceUtf16(字符串,开始位置,结束位置)

截取 UTF-16 字符串,也可用于将字符串 UTF 标记设置为 UTF-16 .
此函数不会修改传入字符串的 UTF 标记,但是返回非空字符串时会其 UTF 编码标记设为 UTF-16。

注意此函数并不是一个编码转换函数,
转换编码请使用 string.toUtf16 函数.

开始位置,结束位置以 UTF-16 字符单位计数(2个字节为1个单位)
可以使用负数表示自右侧倒计数单位,-1 表示最后一个字符.

string.split

拆分字符串,
空字符串拆分后返回数组长度为0,
连续的分隔符中间拆分为空字符串,
改用string.splitEx函数才能使用模式语法指定连续的分隔符

string.split('字符串')

不指定分隔符则按UTF8编码逐个拆分为字符数组,
返回数组,中文等多字节字符会被拆分为一个数组元素,
参数传入空字符串返回数组长度为0

string.split('字符串','A',返回数组最大长度)

单字节快速拆分
返回数组,空字符串返回数组长度为0
参数@3为可选参数,不指定则拆分全部字符串

string.split('字符串','abc',返回数组最大长度)

指定多个单字节分隔符,不可使用多字节分隔符,基于二进制搜索
返回数组,空字符串返回数组长度为0
参数@3为可选参数,不指定则拆分全部字符串

string.split('字符串','<分隔符>',返回数组最大长度)

置于<>内的字符串作为分隔符,
返回数组,空字符串返回数组长度为0
参数@3为可选参数,不指定则拆分全部字符串

string.splitEx

使用模式匹配语法拆分字符串,返回拆分后的字符串数组。
此函数与 string.lines 迭代器使用相同的拆分规则。

string.splitEx(字符串,分隔符模式串,最大拆分次数,开始位置)

使用模式匹配语法拆分字符串,返回拆分后的字符串数组。
参数 @1 传入 null 值或空字符串返回空数组。

分隔符模式串可用括号创建捕获组,首个捕获组如下处理:
- 模式串尾部有 $ 符号,则捕获组放到上个拆分结果尾部。
- 模式串头部有 ^ 符号,则捕获组放到下个拆分结果头部。
- 模式串头部有^ 符号尾部有 $ 号则捕获组本身添加到返回数组中。

省略分隔符模式则按行拆分,
兼容回车、换行、回车换行等不同换行风格,空行不合并。

最大拆分次数可省略(不限次数),分隔符单独加入拆分结果时拆分次数会对齐为奇数。
开始位置以字节为单位,省略则默认从开始拆分。

string.startWith("字符串","开始串")

判断开始串是否位于字符串开始处
基于二进制模式

string.startWith("字符串","开始串",true)

判断开始串是否位于字符串开始处。
基于文本模式,忽略大小写

string.str

转换字符串为不包含'\0'的纯文本字符串,
或转换 UTF-16 字符串(ustring)为不包含'\u0000'的纯文本字符串

string.str(字符串)

如果传入字符串包含 '\0',则返回 '\0' 前面的字符串,
否则返回原字符串。

参数@1也可以是 buffer 对象,
如果输入参数是结构体或指针,应当改用 raw.str 函数

string.str(字符串,true)

参数 @1 可传入 UTF-16 字符串(ustring)。
UTF-16 字符串(ustring)如包含 '\u0000'
则返回 '\u0000' 前面的 UTF-16 字符串(ustring),否则直接返回原字符串。
返回的字符串自动设置 UTF 标记为 UTF-16 。

如果参数 @1 是已经设置 UTF 标记为 UTF-16 的字符串(ustring),参数 @2 可以省略。
参数 @1 也可以是 buffer 对象,如果参数是结构体或指针。
应改用 raw.str 函数

string.table

解析以行为单位的字符串属性表。
类似功能的 string.list 支持用引号包含跨行的字段值,
但 string.table 仅将引号作为字面值处理。

string.table(字符串,键值分隔模式,行分隔模式,行首注释符)

解析以行为单位的字符串属性表。
除参数@1 以外其他所有参数都可以省略。
键值分隔模式默认为 "\s*[:=]\s*",也就是忽略前后空白的冒号或等号。
行分隔符默认兼容回车换行、换行、单回车等行分隔符。
默认不指定行首注释符,该参数仅支持字节码,例如 '#'#。

string.toUtf16

转换字符串到 UTF16 编码字符串。
如果字符串已经是 UTF-16 编码将直接返回参数。
如果转换成功将自动设置字符串的 UTF 标记以避免重复转换。
对 UTF-16 字符串使用下标操作符 [] 可返回 2 字节的宽字节码,
使用直接下标操作符[[]]会返回 2 字节的宽字符

string.toUtf16(字符串)

将字符串转换从指定编码转换为 UTF16 编码
源编码默认为 UTF-8 代码页 65001

string.toUtf16(字符串,源编码)

将字符串转换从指定编码转换为 UTF-16 编码。
源编码参数是表示代码页的数值,省略则默认为 65001(UTF-8 代码页)。

string.toUtf16(字符串,源编码,转换字节数)

字节数为 -1 时表示查找'\0'终止符自动获取长度。
指定转换字节数时,参数 @ 即可使用指针、buffer 作为参数
注意参数 @3 始终以字节计数,而非按字符计数。
源编码参数是表示代码页的数值,例如 65001 表示 UTF-8 编码。

string.trim(str)

从字符串首尾清除所有空白字符

string.trim(str,' ')

从字符串首尾清除指定的一个或多个单字节字符

string.trimleft(str)

从字符串左侧清除所有空白字符

string.trimleft(str,' ')

从字符串左侧清除指定的一个或多个单字节字符
清除多字节字符请不要用这个函数,应改用模式匹配替换,例如
str = string.replace(str,"^[中文]+",``)

string.trimright(str)

从字符串右侧清除所有空白字符

string.trimright(str,' ')

从字符串右侧清除指定的一个或多个单字节字符
清除多字节字符请不要用这个函数,应改用模式匹配替换,例如
str = string.replace(str,"[中文]+$",``)

string.unescape()

还原函数string.escape生成的转义字符串
可兼容JSON字符符转义规则,允许直接包含单引号

string.unhex

还原使用16进制编码的字符串

string.unhex("16进制编码数据","前缀")

还原使用16进制编码的字符串,解码失败返回null值
例如UrlEncode前缀可以指定为"%",前缀可以为空字符,不指定前缀时默认为\x
空前缀必须明确指定一个空字符串,使用空前缀不能混杂非编码字符

如果前缀是单个空白字符时,可以省略字符串开始的前缀(仅作为分隔符使用)

string.unpack(str,i)

取字符串的第i个字符的ascii码数值。

string.unpack(str,i,j)

取字符串的第i个到第j个字符的ascii码数值并返回。

string.upper()

字符串转换为大写

Markdown 格式