2016-07-07 58 views
-2

所以,如果我有变量name。我如何检查它是否符合模式?检查变量是否匹配模式,LUA

例如,我想检查变量名是否等于像text_text这样的模式。所以,一开始的话就会强调单词。没有数字。

我真的不知道该从哪里开始。

local pattern = something if name == pattern then

更新**我曾尝试以下,仍然没有什么工作。

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 

我能请得到一些帮助

+0

只有古怪的方式做T帽子在本地Lua。没有什么适合外部调试的东西。你为什么想这么做?它解决了哪个问题?也许有更好的解决方案 – Piglet

+0

@Piglet我刚刚发现这个'“”== str:gsub(pat,“”)'我可以做那样的事吗?你能告诉我一个奇怪的方式吗? – KevinM1990112qwq

+0

@Piglet我只想将名称的格式设置为First_Last如果有人将它创建为firstlast,那么我想告诉他们更改它。 – KevinM1990112qwq

回答

2

匹配的以下划线链接小写字母的任意组合将是一个模式:

"%l+_%l+" 

%l指定任何小写字母,

后面跟着一个+,它指定它跟随的符号的数量。

所以%l+是指“至少一个小写字母”

_仅仅是一个下划线。

所以图案"%l+_%l+"意味着“至少一个小写字母后跟一个下划线后面至少一个小写字母

请参考https://www.lua.org/pil/20.2.html和/或https://www.lua.org/manual/5.3/manual.html#6.4.1所有你可以构建的模式可能砖。

您可以用字符串标准库所提供的功能,如果你想用那玩意儿更过分结账LPEG例如使用这些模式。string.find,string.gsub等。

0

在字符串模式在Lua,括号之间 任何事情都会被退回 你也做%有特殊卡拉科特之后像信件,搭配一个字母 加入+%后,会让你发现最可能的字母,在图案前你到下一个字符/例如设定字符 的:

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 
+0

所以,我怎样才能确定,如果它只匹配字母和下划线,所以有人不能输入名称**#@ a_a ** 723这样做,然后可以输入所有他们想要的字符,只要字母都在下划线的两侧。我希望模式只包含字母和下划线。这是如何完成的? – KevinM1990112qwq

+0

您可以使用字符集合,一组字符匹配该集合中的任何字符,例如:[%l0] +仅匹配小写字母和数字0 在集合的开头添加^表示它将返回除了集合 之外的任何内容,例如:[^%l _] +将返回任何非小写或下划线的内容。 我们可以用这个来知道这个名字有什么不正常,如果一个字符串匹配了某个[^%l _] +这意味着它不是一个有效的名字,例如: 'if string.match(“@hexalOnnn_a”,“ (“VALID NAME”) end'“ print(”INVALID NAME“) else print(”VALID NAME“) end' –