找到'.' 与string.find()

use*_*781 8 string lua lua-patterns

我正在尝试进行简单的字符串操作:获取文件的名称,而不使用扩展名.只是,string.find()似乎有点问题:

s = 'crate.png'
i, j = string.find(s, '.')
print(i, j) --> 1 1
Run Code Online (Sandbox Code Playgroud)

并且只有点:

s = 'crate.png'
i, j = string.find(s, 'p')
print(i, j) --> 7 7
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是我做错了什么?

Joa*_*son 16

string.find()默认情况下,在字符串中找不到字符串,它在字符串中查找模式.更多完整信息可以在链接中找到,但这是相关部分;

'.' 表示一个通配符,可以表示任何字符.

要实际找到字符串.,需要使用百分号转义句点,%.

编辑:或者,您可以传入一些额外的参数,find(pattern, init, plain)这允许您true作为最后一个参数传入并搜索纯字符串.那会是你的陈述;

> i, j = string.find(s, '.', 1, true)   -- plain search starting at character 1
> print(i, j) 
6 6
Run Code Online (Sandbox Code Playgroud)


Ego*_*off 7

string.find(s, '%.')或者string.find(s, '.', 1, true)


gre*_*olf 5

其他答案已经解释了问题所在。为了完整起见,如果您只对文件的基本名称感兴趣,可以使用string.match. 例如:

string.match("crate.png", "(%w+)%.")  --> "crate"
Run Code Online (Sandbox Code Playgroud)