找回密码
 register

QQ登录

只需一步,快速开始

[*LUA4*] [Lua基础] 字符串查找函数 strfind 使用方法详细教程 [案例大全]

[复制链接]

[*LUA4*] [Lua基础] 字符串查找函数 strfind 使用方法详细教程 [案例大全]

[复制链接]
Waylee

主题

0

回帖

7912

积分

仙帝

积分
7912
Waylee 2023-11-15 12:14 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×

代码环境Lua 4.0
作者信息:雪舞
修正时间:2024-11-12
文章内容:函数说明、参数解释、注意事项、匹配模式使用方法、高级用法与补充知识点、模式匹配中的字符转义、捕获子字符串、忽略大小写查找替代方案、嵌套匹配、性能优化、函数案例。


函数说明

strfind(s, pattern [, init [, plain]]) 这个函数的作用就是在字符串 s 中找到第一个符合 pattern(模式字符串)要求的子字符串。如果找到了,它会返回这个子字符串在 s 中的起始位置和结束位置。如果没有找到,就返回 nil

简单来说,这个函数就像是在一本书中找某个词,并告诉你它从哪里开始,在哪里结束。

参数解释(重要内容):

  1. s:你要查找的文本内容,比如一本书中的一段话。

  2. pattern:你要查找的内容是什么,比如你要找的一个单词或者短语。

  3. init(可选):从哪一段开始找,默认是从开头找。你也可以选择从中间或者从后面开始找。

  4. plain(可选):这个参数用来决定是否使用简单的查找方式。如果设置为 1,那么就关闭复杂的查找功能,只是简单地找你输入的内容。这时候,pattern 里的任何字符都只是普通字符,没有特别的意义。注意,如果你使用这个参数,必须也指定 init 参数,也就是从哪里开始查找。

[, init [, plain]]这个写法的意思是,这些参数是可选的。如果只想用简单查找功能(plain),就必须同时告诉函数从哪里开始找(init)。

注意事项

  • 如果你使用 plain 参数,那么必须也指定从哪里开始查找(init 参数)。
  • plain 参数设置为 1 时,strfind 只是简单地查找内容,不会使用复杂的查找规则。

基础示例

假设你有一句话:
s = "hello world"
你想找到单词 "world" 的位置,可以这样做:

start_pos, end_pos = strfind(s, "world")
print(start_pos, end_pos)
-- 输出:7  11

这表示 "world" 这个单词从第7个字符开始,到第11个字符结束。

你也可以从某个特定位置开始查找,比如从第8个字符开始找:

start_pos, end_pos = strfind(s, "l", 8)
print(start_pos, end_pos)
-- 输出:10  10

这表示从第8个字符开始找,找到一个 "l" 在第10个位置。

如果你只是想简单地查找一个字符串的内容,而不使用任何特殊的匹配符号(例如 . 或 *),可以这样做:

start_pos, end_pos = strfind(s, ".o", 1, 1)
print(start_pos, end_pos)
-- 输出:nil     nil,因为这里的 `.o` 被当作普通字符,而不是使用模式匹配规则

测试函数案例

-- 测试函数
local text = "Hello, Lua 4.0 is different from Lua 5."
local word = "Lua"
local startPos, endPos = strfind(text, word)

if startPos then
    print("找到单词 '" .. word .. "' 在位置 " .. startPos .. " 到 " .. endPos)
else
    print("未找到单词 '" .. word .. "'")
end
--输出:找到单词 'Lua' 在位置 8 到 10

在上述案例中,strfind 函数用于查找字符串 text 中的单词 Lua,并返回其起始和结束位置。如果找到匹配项,则打印结果;否则,打印未找到的提示。这个例子展示了如何在字符串中查找特定的子串以及如何处理查找结果。

进阶示例·匹配模式

pattern 参数中,你可以使用一些特殊的字符来创建匹配模式,使得查找更加灵活。这些特殊字符有:

  1. .:匹配任何单个字符。
    例如:

    s = "hello world"
    start_pos, end_pos = strfind(s, "h.llo")
    print(start_pos, end_pos)
    -- 输出:1  5

    这里的 . 可以匹配任意字符,因此匹配到 "hello"。

  2. %a:匹配任意字母字符(a 到 z,无论大小写)。
    例如:

付费看帖
剩余 46% 内容需要支付 15.00 金币 后可完整阅读
支持付费阅读,激励作者创作更好的作品。
寄情山河

主题

0

回帖

14

积分

练气

积分
14
寄情山河 2024-5-22 16:44 | 显示全部楼层
世上无难事,只怕有心人!

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |网站地图|天天打卡

GMT+8, 2024-11-24 10:22 , Processed in 0.067027 second(s), 8 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表