如何使用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中使用参数,而不需要额外的表来保存结果。@Mijagostring.gf自2006年Lua5.1发布以来,ind
就不存在了。(它被重命名为string.gmatch
)。感谢您的洞察力,但它没有起作用,代码中的一部分是这样的:,如果不是html,我的错。它查找的是“植物、动物产品、食品和饮料”,而不是“鹿角”。这可能是因为它有多个“标题”在同一行中,我该如何解决这个问题?@Mojimi您需要使用string.gsub
而不是string.match
。如果您愿意,我可以为您举个例子。非常感谢它的工作,有趣的是,您如何在gsub.string.gfind中使用参数,而不需要额外的表来保存结果。@Mijagostring.gf自2006年Lua5.1问世以来,ind
就不存在了。(它被重命名为string.gmatch
)。