当前位置:  开发笔记 > 编程语言 > 正文

Lua'plain'tring.gsub

如何解决《Lua'plain'tring.gsub》经验,为你挑选了1个好方法。

我用字符串解析打了一个小块.我有一个字符串:

footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr

我使用gsub删除字符串的一部分有困难.通常我会这样做

lineA = footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr
lineB = footage/down/temp/cars_[100]_upper/
newline = lineA:gsub(lineB, "")

这通常会给我'cars_ [100] _upper.exr'

问题是gsub不喜欢字符串中的[]或其他特殊字符,不像string.find gsub没有使用'plain'标志来取消模式搜索的选项.

我无法手动编辑行以包含特殊字符的转义字符,因为我正在执行文件比较脚本.

任何帮助从新线lineA使用lineB将是非常感谢.



1> Mark Rushako..:

摘自Lua 2e编程的第181页:

神奇的人物是:

( ) . % + - * ? [ ] ^ $

字符'%'用作这些魔术角色的转义符.

所以,我们可以想出一个简单的函数来逃避这些神奇的角色,并将它应用到你的输入字符串(lineB):

function literalize(str)
    return str:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", function(c) return "%" .. c end)
end

lineA = "footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr"

lineB = literalize("footage/down/temp/cars_[100]_upper/")

newline = lineA:gsub(lineB, "")

print(newline)

当然打印:cars_[100]_upper.exr.


另一种(可能更快)写文字化的方式:`str:gsub("[%(%)%.%%% +% - %*%?%[%]%^%$]","%%% 0" )`
推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有