检查变量是否与模式匹配,LUA

检查变量是否与模式匹配,LUA,lua,Lua,因此,如果我有变量name。如何检查它是否与模式匹配 例如,我想检查变量名是否等于text\u text这样的模式。因此,在开始的单词,然后下划线,然后单词。没有数字 我真的不知道从哪里开始 localpattern=something 如果名称==模式,则 更新**我尝试了以下操作,但仍然没有任何效果 local pattern = "a%%sa%" if string.match (name, pattern) then return 1 else return 0 end

因此,如果我有变量
name
。如何检查它是否与模式匹配

例如,我想检查变量名是否等于
text\u text
这样的模式。因此,在开始的单词,然后下划线,然后单词。没有数字

我真的不知道从哪里开始

localpattern=something
如果名称==模式,则

更新**我尝试了以下操作,但仍然没有任何效果

local pattern = "a%%sa%"
if string.match (name, pattern) then
    return 1
else
    return 0
end
我也试过这种方法

local pattern = "a%_a%"
if string.match (name, pattern) then
    return 1
else
    return 0
end

我能得到一些帮助吗?

匹配任何带下划线的小写字母组合的模式是:

"%l+_%l+"
%l
指定任何小写字母

后跟一个
+
,指定其后面的符号编号

所以
%l+
表示“至少有一个小写字母”

只是一个下划线

因此模式
%l+\u%l+”
表示“至少一个小写字母,后跟一个下划线,后跟至少一个小写字母”

请参阅和/或以了解您可以构建图案的所有可能的砖块

您可以在string标准库.string.find、string.gsub等提供的函数中使用这些模式

例如,如果您想在lua中的字符串模式中更多地使用这些内容,请签出LPeg, 论文之间的任何内容都将被退回 此外,您还可以在后面使用一个特殊字符(如字母的字符)来匹配一个字母 在%a之后添加+将使您在进入下一个字符/字符集之前检测到模式中最可能的字母 例如:

s = "Hello Julia my love ! Here's a hug!"
lovername,gift = string.match(s,"(%a+) my love ! Here's a (%a+)")
print(lovername.." was given a "..gift)
在您的示例中,可以执行以下操作:

var = "hello_world"
if (string.match(var, "%a+_%a+")) then -- In this example, _ will be normal
    print("Valid variable name !")
else
    print("Invalid variable name")
end

试试这个:

function match(string)
    local string = string:match('^(%a+_%a+)$')
    if string then
       return true
    else
       return false
    end
end

local string = match('hi I'm webrom')
print(string)
输出=假

输出=假

输出=真

输出=真


模式%a与任何字母都匹配。

在本机Lua中只有奇怪的方法可以做到这一点。不适合调试之外的事情。为什么要这样做?它解决了哪个问题?也许有更好的方法solution@Piglet我刚刚发现这个
“”==str:gsub(pat,“”)
我可以这样做吗?你能给我举一个奇怪的例子吗?@pigger我只想让名称的格式像First\u Last一样如果有人像just firstlast那样创建它,那么我想告诉他们更改它。所以你想通过一些质量检查来解析Lua脚本,而不是在运行的脚本中获取变量名?然后字符串库应该可以解决您的问题。只需组合一些标准的brick.google“正则表达式即可“。还有一些Lua库提供了更强大的功能。@KevinM1990112qwq:您尝试过使用吗?那么我如何确保如果它只匹配字母和下划线,因此有人无法输入名称?#@a_a723这样做,那么可以输入他们想要的所有字符,只要字母在下划线的两侧。我希望模式仅由字母和下划线组成。如何做到这一点?您可以使用字符集,一组字符匹配该集合中的任何字符,例如:[%l0]+只匹配小写字母,数字0在集合的开头添加一个^意味着,它将返回除集合中的字符以外的任何字符,例如:[^%l\]+将返回任何非小写或下划线的内容。我们可以使用它来知道名称有任何异常,如果字符串与某个[^%l_33;]+匹配,则表示它不是有效名称,例如:
if string.match(“@hexalOnnn_a”,“[^%l_33;]+”),然后打印(“无效名称”)或打印(“有效名称”)结束
local string = match('14545_15456')
print(string)
local string = match('hello_world')
print(string)
local string = match('HELLO_WORLD')
print(string)