首页 技术 正文
技术 2022年11月9日
0 收藏 476 点赞 2,282 浏览 937 个字

  在Lua中,像这样()的空白捕获具有特殊意义。表示捕获它在目标字符串中的位置,返回一个数字:

print(string.match("hello","()ll()"))  --> 3  5  --第一个()捕获当前字符串位置,第二个()是在匹配后捕获的位置

这个示例与string.find得到的结果不一样,就因为第二个捕获的位置是在匹配之后的。

在一个字符串中扩展tab(制表符):

function expandTabs(s, tab)
tab = tab or -- tab的大小(默认是8)
local corr =
s = string.gsub(s,"()\t",function(p) --匹配字符串中所有的"\t",捕获它的位置。函数计算还需要多少空格才能达到整数倍tab的列。
local sp = tab - (p - + corr)%tab --先对位置减一,使其从0开始计数,然后加上corr以补偿前面的tab(每个tab的扩展都会影响后面的tab位置
corr = corr - + sp --更新这个corr补偿值,用于下一个tab的修正,减一以去掉当前tab,再加上要添加的空格数sp。
return string.rep(" ",sp)
end)
return s
end

再看一下如何实现逆向操作,将空格转换为tab。

第一个方法:通过空捕获来对位置进行操作

第二个方法:可以在字符串中每8个字节后插入一个标记,无论该标记是否位于空格前,都用tab替换它:

function unexpandTabs(s,tab)
tab = tab or
s = expandTabs(s) --首先对字符串中所有的tab进行了扩展
local pat = string.rep(".",tab)
s = string.gsub(s,pat,"%0\1") --在每tab个字符后添加一个标记(控制字符"\1"),"%0"是捕获整个匹配项。
s = string.gsub(s," +\1","\t") --将所有以标记结尾的空格序列(" +"都替换为tab," +"表示至少一个空格。
s = string.gsub(s,"\1","") --删除剩下的标记,即那些没有位于空格后的标记
return s
end

以上内容来自:《Lua程序设计第二版》和《Programming in Lua  third edition 》

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,489
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,290