Lua正则表达式只匹配一次。

有人能帮我将“regex”(又名模式)转换成 Lua 模式,以用于 string.match() 函数吗?要转换的正则表达式是 ytplayer\.config\s*=\s*(\{.+?\});。您可以在此网站上查看有关该正则表达式的说明:https://regex101.com/#pcre

本质上,我想查找以 ytplayer.config = 开头的字符串(注意等号前后可能出现的空格),接着是一个 {,一直到我们遇到分号为止。

ytplayer.config = {可能包含大量文本、特殊字符和其他所有可能的内容...}}; 这可能是一个结果。

目前,我使用的是 string.match(s, "ytplayer.config%s=%s({.});"),但它返回的是一个完全相同的副本(使用了 kdiff 进行了检查)。

点赞
用户3832970
用户3832970

请看,这将返回您捕获的组:

print(string.match("ytplayer.config = {a lot of text, special characters and everything else which is possible...}};", "^ytplayer%.config%s*=%s*({.-});"))

输出:

{a lot of text, special characters and everything else which is possible...}}

正则表达式是 ^ytplayer%.config%s*=%s*({.-});。如果您不想检查字符串开头,请从开头移除 ^

请参阅此演示

Lua模式中,转义“魔法符号”。像*一样,修饰符-也匹配原始类的零个或多个字符。但是,它不匹配最长的序列,而是匹配最短的序列。

2015-04-24 10:53:12