如何使用lua模式捕获html标记

如何使用lua模式捕获html标记,lua,lua-patterns,Lua,Lua Patterns,这就是我试图从外观中提取的内容: 我怎样才能得到“这里的价值”?它里面没有数字或“>”符号,只有字母、空格、'-和 我试过了 lines:match([[title="(.+)">]]) 但它只是在捕获后得到了整条线。您的模式的问题是: title=" -- This is fine, but you probably want to find out what tag title is in. (.+) -- Problem: Greedy match. I'll i

这就是我试图从外观中提取的内容:

我怎样才能得到“这里的价值”?它里面没有数字或“>”符号,只有字母、空格、'-和

我试过了

lines:match([[title="(.+)">]])

但它只是在捕获后得到了整条线。

您的模式的问题是:

title="    -- This is fine, but you probably want to find out what tag title is in.
(.+)       -- Problem: Greedy match. I'll illustrate this later.
">         -- Will match a closing tag with a double quote.
现在,如果我有这个HTML:

<html>
 <head title="Foobar">
 </head>
 <body onload="somejs();">
 </body>
</html>

您的模式将匹配:

Foobar"></head><body onload="somejs();

Foobar”>
而不是最后一个
“>

模式的问题是:

title="    -- This is fine, but you probably want to find out what tag title is in.
(.+)       -- Problem: Greedy match. I'll illustrate this later.
">         -- Will match a closing tag with a double quote.
现在,如果我有这个HTML:

<html>
 <head title="Foobar">
 </head>
 <body onload="somejs();">
 </body>
</html>

您的模式将匹配:

Foobar"></head><body onload="somejs();

Foobar“>
而不是最后一个
”>

可以尝试
行:匹配([[title=(([^”]*?)“>]))
。在盲目地将标签放在你的问题上之前,也要阅读标签的描述。我怀疑你所描述的
捕获
标签是正确的。还要注意,Lua模式不是正则表达式。
+
是贪婪的,将匹配到最后一个双引号。尝试
-
匹配到第一个双引号。
lines:match'title=“(.-)”>”
可以尝试
行:match([[title=(“([^”]*?)”>]))
。在盲目地将标签放在你的问题上之前,也要阅读标签的描述。我怀疑你所描述的
捕获
标签是正确的。还要注意,Lua模式不是正则表达式。
+
是贪婪的,将匹配到最后一个双引号。尝试
-
匹配到第一个双引号。
lines:match'title=“(.-)”>”
谢谢您的洞察力,但它不起作用,代码中的一节是这样的:,如果不是html,我的错。它查找的是“植物、动物产品、食品和饮料”,而不是“鹿角”。可能是因为它有多个“标题”在同一行中,我该如何解决这个问题?@Mojimi您需要使用
string.gsub
而不是
string.match
。如果您愿意,我可以为您举个例子。非常感谢它的工作,有趣的是,您如何在gsub.string.gfind中使用参数,而不需要额外的表来保存结果。@Mijago
string.gf自2006年Lua5.1发布以来,ind
就不存在了。(它被重命名为
string.gmatch
)。感谢您的洞察力,但它没有起作用,代码中的一部分是这样的:,如果不是html,我的错。它查找的是“植物、动物产品、食品和饮料”,而不是“鹿角”。这可能是因为它有多个“标题”在同一行中,我该如何解决这个问题?@Mojimi您需要使用
string.gsub
而不是
string.match
。如果您愿意,我可以为您举个例子。非常感谢它的工作,有趣的是,您如何在gsub.string.gfind中使用参数,而不需要额外的表来保存结果。@Mijago
string.gf自2006年Lua5.1问世以来,ind
就不存在了。(它被重命名为
string.gmatch
)。