lua 中变量字符串和模式之间的捕获

我想要获取两个字符串之间的一个字符串。

texterrors = [[
    <error_no name="1">
    <designator>M18</designator>
    <pin>M18</pin>
    <stamp_name>Con_10p</stamp_name>
    <package_name>M18</package_name>
    <errortype>9</errortype>
    <error_contents></error_contents>
    <pcb_no></pcb_no>
    <feeder_no></feeder_no>
    <pos_x>23735</pos_x>
    <pos_y>9722</pos_y>
    <window>2</window>
    <ng_message>Histogram NG 0%</ng_message>
    <comment>Histogram NG 0%(* *){Con_10p}</comment>
    <ng_image></ng_image>
    </error_no>
    <error_no name="2">
    <designator>M13</designator>
    <pin>M13</pin>
    <stamp_name>Cage_SFP_back</stamp_name>
    <package_name>M13</package_name>
    <errortype>9</errortype>
    <error_contents></error_contents>
    <pcb_no></pcb_no>
    <feeder_no></feeder_no>
    <pos_x>10962</pos_x>
    <pos_y>14090</pos_y>
    <window>64</window>
    <ng_message>Mismatch13%</ng_message>
    <comment>Mismatch13%(-0.14 -0.07){Cage_SFP_back}</comment>
    <ng_image></ng_image>
    </error_no>
]]

我想要捕获 n 个字符串,每个字符串都在 "<error_no name="i">""</error_no>" 之间。 我的代码如下,但是每个 i 的结果都是 nil。

for i = 1, n do
errindex1[i] = '<error_no name='..'"'..i..'"'..'>'
stringg = errindex[i]
texterr[i] = string.match(texterrors,"..stringg..(%a)</error_no>")

如何使用变量字符串 stringg 作为 pattern?

点赞
用户7504558
用户7504558

使用 gmatch 和以下模式(以此为例):

local texterr = {}
for err in texterrors:gmatch('<error_no name="%d+">(.-)</error_no>') do
   texterr[#texterr+1] = err
   print(err)
end

texterrors 中符合 <error_no name="%d+">(.-)</error_no> 正则表达式的所有内容提取出来,并存储到 texterr 表中。同时,将每个符合条件的内容输出到控制台。

2018-09-30 20:00:46