local querycreate = "create user 'dddqwd123_dwqd'@'localhost'"
local create, usercreate, username, userhost = querycreate:match("^(%w+)%s+(%w+)%s+\'(%w)\'@\'(%w)\'$")
print(string.format("query: %s", querycreate))
print(string.format(" var create = %s \n var usercreate = %s \n var username = %s \n var userhost = %s", create, usercreate, username, userhost))
query: create user 'dddqwd123_dwqd'@'localhost'
var create = nil
var usercreate = nil
var username = nil
var userhost = nil
我的正则表达式在 http://regexr.com?37voi 上运行良好.
如果我将其更改为 ("^(%w+)%s+(%w+)%s+")
,则会输出:
var create = create
var usercreate = user
var username = nil
var userhost = nil
如果我通过将 querycreate
设置为 "create user dddqwd123_dwqd @ localhost"
并使用 ^(%w+)%s+(%w+) 来删除引号%s+(%w+) @ (%w+)$
,则输出正常。
最佳答案
您的初始模式:
"^(%w+)%s+(%w+)%s+\'(%w)\'@\'(%w)\'$"
- 模式中的最后两个捕获缺少 + 说明符来指示它们要读取 1 个或多个字符。
- _ 不是与
%w
匹配的单词字符。您将需要一个包含 _ 的字符类,您需要在任何地方进行匹配。 - 在 " 引用的字符串中不需要转义 '。
有一些改进:
"^(%w+)%s+(%w+)%s+'([%w_]+)'@'([%w_]+)'$"
或者:如果您想匹配一组引号 '
中的任何内容,您可以匹配它的逆类:
"^(%w+)%s+(%w+)%s+'([^']*)'@'([^']*)'$"
([^']*)
将捕获除 '
以外的任何内容(包括任何内容),直到字符串末尾或 '<找到
。
关于lua - 为什么这个 Lua 模式不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097803/