gpt4 book ai didi

string - Lua:String.match vs String.gmatch?

转载 作者:行者123 更新时间:2023-12-05 01:01:14 24 4
gpt4 key购买 nike

我有“5.1 引用手册”和“Lua 编程:第 3 版”。在我前面。阅读这些以及网络上的大量搜索,在使用 string.match 时仍然让我有些困惑。和 string.gmatch .

我知道它们都用于定位模式。

以下是他们在 string.gmatch 的“引用手册”中使用的示例:

s = "hello world from Lua"
for w in string.gmatch (s, "%a+") do
print(w)
end

我知道这将遍历 s 中的所有单词并每行打印它们。

这是他们在“Lua 编程”一书中为 string.match 使用的示例。 :
date = "Today is 17/7/1990"
d = string.match(date, "%d+/%d+/%d+")
print(d) -- prints 17/7/1990

我感到困惑的是什么时候适合使用一个而不是另一个?

例如,您想要解析的代码在其中包含数十次相同的模式。此模式包含您需要的变量,哪个是更好的选择?下面的示例代码(x 是与其他行不同的所有变量数据。数据可以是您不关心寻找的任何垃圾,这只是噪音):
Header contains variable (HERE) and (HERE) I want.  
data data data data data data data data
<Font Typeset:xxxx Font Color:xxx Font Xpos:xxx Font Ypos:xxx Font Bold:X Font Uline:X Font Italic:X Font Text:XXXXXXXXX>
data data data data data data data
<Font Typeset:xxxx Font Color:xxx Font Xpos:xxx Font Ypos:xxx Font Bold:X Font Uline:X Font Italic:X Font Text:XXXXXXXXX>
<Font Typeset:xxxx Font Color:xxx Font Xpos:xxx Font Ypos:xxx Font Bold:X Font Uline:X Font Italic:X Font Text:XXXXXXXXX>
<Font Typeset:xxxx Font Color:xxx Font Xpos:xxx Font Ypos:xxx Font Bold:X Font Uline:X Font Italic:X Font Text:XXXXXXXXX>
data data data data data data data data data
<Font Typeset:xxxx Font Color:xxx Font Xpos:xxx Font Ypos:xxx Font Bold:X Font Uline:X Font Italic:X Font Text:XXXXXXXXX>
<Font Typeset:xxxx Font Color:xxx Font Xpos:xxx Font Ypos:xxx Font Bold:X Font Uline:X Font Italic:X Font Text:XXXXXXXXX>
data data data data data data data data data data data data data data data data data data data data data data data data
<Font Typeset:xxxx Font Color:xxx Font Xpos:xxx Font Ypos:xxx Font Bold:X Font Uline:X Font Italic:X Font Text:XXXXXXXXX>
Footer here also has three variables I want (here)/(here) and (here)

这段代码显然有一个模式。但是,如果想创建一个简单的函数来解析数据并获取变量,那么哪个是更好的选择?
function match(data)
local f_type, f_color, f_xpos, f_ypos, f_bold, f_uline, f_italic, f_txt = data:match("<Font Typeset:(.-) Font Color:(.-) Font Xpos:(.-) Font Ypos:(.-) Font Bold:(.-) Font Uline:(.-) Font Italic:(.-) Font Text:(.-)>
print(f_type, f_color, f_xpos, f_ypos, f_bold, f_uline, f_italic, f_txt)
end

...或者...
function gmatch(data)
local f_type, f_color, f_xpos, f_ypos, f_bold, f_uline, f_italic, f_txt = data:gmatch("<Font Typeset:(.-) Font Color:(.-) Font Xpos:(.-) Font Ypos:(.-) Font Bold:(.-) Font Uline:(.-) Font Italic:(.-) Font Text:(.-)>
print(f_type, f_color, f_xpos, f_ypos, f_bold, f_uline, f_italic, f_txt)
end
  • gmatch 是否仅遍历整个代码(本示例中的数据)并返回模式为真的所有实例,其中 match 仅执行第一个?
  • 在什么情况下一种比另一种更好?

  • ETA:我在示例代码中添加了页眉和页脚。这个页眉和页脚都包含我要使用的变量。现在,整个代码块(页眉/正文/页脚)在我要解析的同一个输入文件中重复了很多次。所以模式中有模式。

    最佳答案

  • Does gmatch just iterate over the entire code (data in this example) and return all instances where the pattern is true where match only does the first?



    它为此返回一个迭代器。

    Returns an iterator function that, each time it is called, returns the next captures from pattern (see §6.4.1) over the string s. If pattern specifies no captures, then the whole match is produced in each call.

  • In what scenarios is one better than the other?


  • string.gmatch 当您只对比赛感兴趣时,这是最好的。
  • string.gsub 当您需要替换比赛而不考虑他们的位置时,这是最好的选择。
  • string.match 是最多才多艺的,返回第一场比赛和它的位置。成本没有专门用于任何任务,因此需要更多代码。
  • 关于string - Lua:String.match vs String.gmatch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28593385/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com