两个路径上的string.gsub()不起作用

时间:2017-10-16 15:36:36

标签: lua relative-path gsub

我在包含子目录和markdown文件的“content”文件夹的目录树中循环。然后我需要知道那些“内容”文件夹中降价的相对路径。

在bash脚本中我会做类似的事情:

CONTENT_PATH="/home/myusr/apps/myapp/content"
file_path="/home/myusr/apps/myapp/content/file/pgp.md"

echo "${file_path#$CONTENT_PATH}"
# /file/pgp.md

所以在Lua我没有找到类似的东西,所以我试过string.gsub()

print(string.gsub(file_path, CONTENT_PATH, ""))
-- /home/myusr/apps/myapp/content/file/pgp.md 0

但它不起作用,似乎我的CONTENT_PATH字符串不匹配,我不知道为什么?

print(CONTENT_PATH)
-- /home/hs0ucy/_01_http/fakestache-lua/content

print(file_path)
-- /home/hs0ucy/_01_http/fakestache-lua/content/file/pgp.md

谢谢!

PS:我是Lua的新手。

1 个答案:

答案 0 :(得分:1)

来自:Lua string.gsub with a hyphen

连字符是Lua中的一个特殊字符,需要像这样转义:%-

我发现这一点,慢慢地让CONTENT_PATH越来越长,直到它不再有效。好的'二分搜索!

编辑:如果您无法修改CONTENT_PATH,但您确定file_path中有CONTENT_PATH

contentPathLen = string.len(CONTENT_PATH)
print(string.sub(file_path, contentPathLen + 1))
-- Output: /file/pgp.md

或者,如果您需要验证file_path是否以CONTENT_PATH开头:

base = string.sub(file_path, 0, contentPathLen)    
if base == CONTENT_PATH then
    print("file_path is under CONTENT_PATH")
end