Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String lua字符串与变量字符串和变量模式匹配_String_Lua_Pattern Matching_String Matching - Fatal编程技术网

String lua字符串与变量字符串和变量模式匹配

String lua字符串与变量字符串和变量模式匹配,string,lua,pattern-matching,string-matching,String,Lua,Pattern Matching,String Matching,我在表索引中存储了一个长变量字符串,如下所示: my_table[4] = MYHOST1.fully.qualfied.com 我有一个从文件中读取的主机名列表,它以字符串形式返回。我正在用for循环迭代这个过程 MYHOST1 MYHOST2 MYHOST3 出于某种原因: print (string.match(match_string, machine)) 不匹配,即使“match_string”保存表中的正确值,“machine”保存我迭代的正确名称。这里我需要对变量字符串做一

我在表索引中存储了一个长变量字符串,如下所示:

my_table[4] = MYHOST1.fully.qualfied.com
我有一个从文件中读取的主机名列表,它以字符串形式返回。我正在用for循环迭代这个过程

MYHOST1 MYHOST2 MYHOST3

出于某种原因:

print (string.match(match_string, machine))
不匹配,即使“match_string”保存表中的正确值,“machine”保存我迭代的正确名称。这里我需要对变量字符串做一些特殊的处理吗

下面是整个函数,其中包含大量调试。我不确定我是否正在为论坛格式化这篇文章。我的复制和粘贴非常混乱。 结束

结束


================================================================

所以,这没有什么问题。我最初匹配的机器名也是捕获机器名后的空白。我在打印了被分隔符包围的机器名后发现了这一点。我必须为此添加一个修剪函数

下面是我添加的函数:

功能微调(字符串)
本地修剪=字符串:查找“%S”
返回修剪后的字符串:匹配(“%S”,修剪)或“”
结束


这使我可以将机器名作为变量传递,并删除后面的空格。在匹配中删减空白可能更好,但我无法找到一种方法来做到这一点,并将其保留为分隔符(这对于制表符分隔的值很重要)

您能添加打印这两个变量的结果吗?您能给我们显示完整的代码吗?因为我只能通过看到两个变量名进行猜测,而不知道它们是如何分配给代码的。请您将文本和模式作为字符串提供好吗?不是确切的文本(我不想/不能在其上公开数据),但在功能上是相同的,在本查询的第一部分中列出了。如果您不同时提供这两个文本,您无法问为什么模式与文本不匹配。这不是很明显吗?您只需提供变量名。给出一个与实际数据产生相同结果的示例
function read_giant_file(file_name)
local header_true = 0
local max_fields = 1
local machine_count = table.maxn(machine_names)
local machine_list = table.concat(machine_names,' ')
--print (machine_count)
--print (machine_list)
for line in io.lines(file_name) do                                                      
    for machine in machine_list:gmatch"%g-[%s]" do                                  
            print ("machine: "..machine)                                            

            for field in line:gmatch("(.-)\t") do                                   
                    table.insert(field_table, field_index, field)                   
                    print ("field_index: "..field_index.. "field: "..field)      
                    field_index = field_index + 1                                   

            end    

            if header_true == 0 then                                                
                    for key, value in pairs(field_table) do                         
                            print ("key: "..key," ".."header: "..value)             
                    end                                                             
                    header_true = 1                                                 
                    max_fields = table.maxn(field_table)                            
                    print ("write out headers")                                     

                    for i = 1,table.maxn(field_table) do                            
                            print ("i: "..i)i                                       
                            table.insert(field_table,i,nil)                         
                    end                                                             



                    field_index = 1                                                 
            end     -- close loop for header

            print ("field index: "..field_index)                                    
            print ("max fields: "..max_fields)                                      
            if field_index >= max_fields and max_fields > 0 and header_true ~= 0 then 
                     print ("FT: "..field_table[4])                                  
                    print ("machine: "..machine)                                    
                    local match_string = field_table[4]                             
                    print (string.match(match_string, machine))                     
                    i, n = string.find(field_table[4], 'machine')                   
                    print (i,n)                                                     
                    if i ~= nil then                                                
                            print ("matchy")                                        
                    end
                    field_index = 1                                                 
            end




    end 
    end