如何在Lua中进行模式匹配

如何在Lua中进行模式匹配,lua,Lua,假设我在Lua有这样一个例子: myvara = "Box red" myvarb = "Box red 36" 如果数字每次都改变,我如何构造一个表达式来查看这两个变量是否相同?i、 我只想检查两个变量是否都是红色框,但数字并不重要 我想使用模式匹配,但我不知道如何在表达式中高效地使用模式匹配。我不想使用string.find,它必须是模式匹配 我需要能够做到的是: if myvara == myvarb (ignoring box number) then... 。。。使用模式匹配(不

假设我在Lua有这样一个例子:

myvara = "Box red"
myvarb = "Box red 36"
如果数字每次都改变,我如何构造一个表达式来查看这两个变量是否相同?i、 我只想检查两个变量是否都是红色框,但数字并不重要

我想使用模式匹配,但我不知道如何在表达式中高效地使用模式匹配。我不想使用string.find,它必须是模式匹配

我需要能够做到的是:

if myvara == myvarb (ignoring box number) then... 
。。。使用模式匹配(不是string.find或类似的东西)

哦,有时候可能会有不同的单词数量,数字可能在不同的地方。这就是为什么我需要使用模式匹配


谢谢。

在比较两个字符串之前,您可以删除两个字符串中的所有空格和数字:

if (myvara:gsub("[%d ]","") == myvarb:gsub("[%d ]","")) then
  ....

“使用模式匹配(不是string.find或类似的东西)。”
string.find
。该页面上有很多不同的方法。我应该用哪一种?是string.gsub还是string.match或其他?我希望能够在一个语句中完成这项任务(因此循环或任何内容都不需要)。在比较之前,将所有数字替换为数字0:
如果myvara:gsub(“%d+”,“0”)==myvarb:gsub(“%d+”,“0”),则
我稍微更新了我的问题,因为我认为我的措辞错误。如果我想检查“红盒”是否等于“红盒x”,其中x是任何数字,该怎么办?我想我的措辞完全错了。让我再试一次。假设我有一个字符串“红色汽车3”。如果没有数字3,如何使用模式匹配将其输出到新变量?所以我希望新变量是“redcar”。如果它是“红色3车”,又如何使用模式匹配将其输出到新变量?新变量应再次为“红色汽车”。没有gsub可能吗?难道不能使用gmatch或其他东西,让它省略数字吗?如果你只删除数字,那么你会得到“红色汽车”(尾随空格)和“红色汽车”(单词之间的两个空格)。这就是你想要的吗?或者您还需要删除数字前面的一个空格吗?如果数字在字符串的开头怎么办?我想你需要更好地描述你想做的事情。我想我也需要删除空格。所以“红色汽车3”变成了“红色汽车”,而“红色汽车3”变成了“红色汽车”。你为什么需要避免gsub?你不能用吗?删除数字要比提取其他内容容易得多。还有,红车3(没有空格)怎么样?也删除这个数字?你必须运行测试,看看哪种方法更好,但这听起来像是过早优化的例子。我会先用
gsub
实现它,然后检查它是否会产生任何性能问题。