lua - 为什么这个 Lua 模式不起作用?

标签 lua quotes lua-patterns

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/

相关文章:

lua - 魔兽世界 LUA API UnitClass() 返回 nil 值

linux - 如何在 LUA 中添加或减去设定时间的值

linux - 什么时候用引号括起 shell 变量?

regex - 如何在标签中查找报价?

for-loop - string.match 在 Lua for 循环中不起作用

Lua 尝试索引? (零值)

c - Lua C API 和 lua_newuserdatauv 函数中的用户值具体是如何工作的?

bash - 在 Bash 中使用变量作为函数参数

string - 匹配到 "::"之前的模式不适用于 string.gsub

string - 使用 string.find() 查找 '.'