string.find

简介: string.find

函数 string.find 用于在指定的目标字符串中搜索指定的模式。最简单的模式就是一个单词,它只会匹配到这个单词本身。例如,模式 'hello' 会在目标字符串中搜索子串 "hello" 。函数 string.find 找到一个模式后,会返回两个值:匹配到的模式开始位置的索引结束位置的索引。如果没有找到任何匹配,则返回 nil


s = "hello word"
i, j = string.find(s, "hello")
print(i, j)                       --> 1   5
print(string.sub(s, i, j))        --> hello
print(string.find(s, "word"))     --> 7   11
i, j = string.find(s, "l")
print(i, j)                       --> 3   3
print(string.find(s, "lll"))      --> nil


匹配成功后,可以以函数 find 返回的结果为参数调用函数 string.sub 来获取目标字符串中模式匹配相应模式的子串。对于简单的模式来说,这一般就是模式本身。


函数 string.find 具有两个可选参数。第三个参数是一个索引,用于说明从目标字符串的那个位置开始搜索。第四个参数是一个布尔值,用于说明是否进行简单搜索。字如其名,所谓简单搜索就是忽略模式而在目标字符串中进行单纯的"查找子字符串"的动作


> string.find("a [world]", "[")
stdin:1: malformed pattern (missing ']')
> string.find("a [world]", "[", 1, true)    --> 3   3


由于 '[' 在模式中具有特殊含义,因此第一个函数调用会报错。在第二个函数调用中,函数只是把 '[' 当做简单字符串。


注意

如果没有第三个参数,是不能传入第四个参数的。

目录
相关文章
For input string: "null"
java.lang.NumberFormatException: For input string: "null"   在开发中你是否遇到过这样的问题,不管请求到的值是什么都能进入不为null或”“的判断中,如下例:      Stringtemp=req.
3817 0
|
6月前
|
Java
每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?
每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?
|
7月前
grep 查询 包含string1、string2和string3的行
您可以使用以下命令来查询包含多个字符串的行: ``` grep 'string1.*string2.*string3' filename ``` 其中,`string1`、`string2`和`string3`是您要过滤的字符串,`filename`是要查询的文件名。 上述命令使用正则表达式来匹配包含`string1`、`string2`和`string3`的行,并将结果输出。`.`表示匹配任意字符,`*`表示匹配前面的字符0次或多次。 您还可以使用`-E`选项来启用扩展正则表达式模式,以实现更复杂的匹配模式: ``` grep -E 'string1|string2|string3' f
String.search()
String.search()
70 0
|
JavaScript 前端开发 索引
String.indexOf()
String.indexOf()
75 0
「JDK」解析 String str=““与 new String()
一、基础概念 为了讲清楚他们的差异,这里先介绍几个概念。 1.1 常量池 所谓常量池:顾名思义就是用来存放一些常量的。该常量是在编译期被确定,并被保存在已编译的.class文件中,其中包括了类,方法,接口等包含的数值常量,字符常量和字符串常量。
|
C++
C++ string.find()函数
C++ string.find()函数
134 0
每天一个知识点(二)String str=“i”与 String str=new String(“i”)一样吗?
不一样,使用String str="i",java虚拟机会把它分配到常量池中,而 String str=new String(“i”)创建了一个对象,会被分到堆内存中。
String str = new String(“abc“)到底new了几个对象
如果常量池里面没有“abc”这个字符串,那虚拟机就会在堆内存中new出一个String对象,还会在常量池中new一个abc字符串对象;
15508 0