lua string.match 不如预期地匹配(与其他语言不同)

a = "stackoverflow.com/questions/ask"
print(string.match(a,"(.*/)"))   -- stackoverflow.com/questions/
print(string.match(a,"(.*/).*")) -- stackoverflow.com/questions/

我无法理解第二个结果。在我看来,它应该是" stackoverflow.com/questions/ask",因为" (.*/)"匹配" stackoverflow.com/questions/",而" .*"匹配" ask"。 有人能告诉我为什么第二个结果是" stackoverflow.com/questions/"吗? x = string.match(a,"(.*/).*")x = string.match(a,"(.*/)") 是相同的吗?

点赞
用户7556173
用户7556173

【Captures:】(http://www.lua.org/manual/5.3/manual.html#6.4.1)

一个模式可以包含在括号中的子模式, 它们描述了捕获内容。当匹配成功时, 与捕获对应的主题字符串子串被存储为被捕获的内容以备后用。捕获按照左括号进行编号。例如在模式"(a*(.)%w(%s*))"中, 相对应字符串的部分" a*(.)%w(%s*)" 被存储为第一个捕获 (因此被编号为1);字符"."被捕获并编号为2, 而匹配"%s*"的部分被编号为3。

2017-09-02 06:36:03