Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找'';使用string.find()_String_Lua_Lua Patterns - Fatal编程技术网

查找'';使用string.find()

查找'';使用string.find(),string,lua,lua-patterns,String,Lua,Lua Patterns,我试图做一个简单的字符串操作:获取文件名,不带扩展名。只有,string.find()似乎与点有关: s = 'crate.png' i, j = string.find(s, '.') print(i, j) --> 1 1 s = 'crate.png' i, j = string.find(s, 'p') print(i, j) --> 7 7 只有点: s = 'crate.png' i, j = string.find(s, '.') print(i, j) -->

我试图做一个简单的字符串操作:获取文件名,不带扩展名。只有,
string.find()
似乎与点有关:

s = 'crate.png'
i, j = string.find(s, '.')
print(i, j) --> 1 1
s = 'crate.png'
i, j = string.find(s, 'p')
print(i, j) --> 7 7
只有点:

s = 'crate.png'
i, j = string.find(s, '.')
print(i, j) --> 1 1
s = 'crate.png'
i, j = string.find(s, 'p')
print(i, j) --> 7 7
这是一个bug,还是我做错了什么?

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

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

string.match("crate.png", "(%w+)%.")  --> "crate"

-1; Lua的转义字符是
%
,而不是
\
。试图使用反斜杠可能会给您一个“无效转义序列”错误。@missingno您当然是正确的,我把转义序列和模式的转义字符弄混了。修正了答案。看。虽然它指的是不同的特殊字符,但解决方案是相同的。