【问题标题】:Unexpected lua pattern matching result意外的 lua 模式匹配结果
【发布时间】:2016-03-24 16:16:56
【问题描述】:

对于以下代码:

local function getParentPath(_path)

    pattern = "(.+)([/\\][/\\])(.+)"
    i,j,k = string.match(path,pattern)
    return i,j,k

end

print(getParentPath(path))

对于 path = "C://data//file.text",我得到:

C://data // file.text

但是对于 path = "C:\data\file.text",我得到:

nil nil nil

我正在寻找一种适合两者的模式。有什么建议吗?

【问题讨论】:

  • 您能否详细说明您期望匹配的内容?一切顺利//?您的字符串中有两个,仅从一个示例中就不清楚您真正想要什么。
  • 对不起,我重新提出了我的问题

标签: lua lua-patterns


【解决方案1】:

问题是第一个.+ 贪婪地匹配并抓住所有最后一个\ 然后回溯。那么\可以和[\\/]匹配,所以第一组有一个反斜杠,第二组有第二个。

你可以通过使用来修复它

pattern = "^(.-)([/\\]+)([^/\\]+)$"

IDEONE demo

解释:

  • ^ - 字符串开头
  • (.-) - 任何字符,但尽可能少(与 - 量词进行惰性匹配)
  • ([/\\]+) - 1+ /\
  • ([^/\\]+) - 除了 /\ 之外的 1+ 个字符
  • $ - 字符串结束

【讨论】:

【解决方案2】:

这是完全可以预料的。第一个贪婪的 (.+) 在不破坏以下模式的情况下尽可能多地匹配符号 - 即,直到最后一个斜线为止的所有内容都是使 ([/\\]+) 匹配所必需的。

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 2017-10-17
    • 2015-12-29
    • 1970-01-01
    • 2021-08-04
    • 2016-01-22
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多