Lua模式查询

Sat*_*hJM 2 string lua lua-patterns

我需要从一个更大的字符串中检测出一个单词说约翰,说约翰是个好男人 所以我有这个模式来找到这个词

[j][o][h][n]
Run Code Online (Sandbox Code Playgroud)

并按如下方式使用:

local pattern = "[j][o][h][n]"
local str = "john is a good man"
print(str:find(pattern))
Run Code Online (Sandbox Code Playgroud)


为了接受字母多次出现(例如jooohn是一个好人),我将模式修改为

[j]+[o]+[h]+[n]+
Run Code Online (Sandbox Code Playgroud)

我需要忽略可能出现在单词之间的空格(或其他非字母字符)(例如joh; n是一个好人),所以我在每个字母中加上[^ az]*,结果模式是

[j]+[^a-z]\*[o]+[^a-z]\*[h]+[^a-z]\*[n]+[^a-z]\*
Run Code Online (Sandbox Code Playgroud)

现在这对于"jooh!n is a good man"这样的词来说是完美的.但如果!符号出现在重复的字母内,模式失败.例如,在jo!ohn是一个好人,没有检测到模式.如何修改模式以实现此目的?

编辑

例:

local str = "jooohn is a good man"
local pattern = "[j]+[^a-z]*[o]+[^a-z]*[h]+[^a-z]*[n]+[^a-z]*"
print(str:find(pattern))
Run Code Online (Sandbox Code Playgroud)

这将打印 1 7

 local str = "joo!ohn is a good man"
 local pattern = "[j]+[^a-z]*[o]+[^a-z]*[h]+[^a-z]*[n]+[^a-z]*"
 print(str:find(pattern))
Run Code Online (Sandbox Code Playgroud)

只打印nil 我需要一个允许我在场景2中检测到joo!ohn的模式

Pau*_*nko 6

这应该做"j[j%W]*o[o%W]*h[h%W]*n[n%W]*":

local str = "joo!ohn is a good man"
local pattern = "j[j%W]*o[o%W]*h[h%W]*n[n%W]*"
print(str:find(pattern))
Run Code Online (Sandbox Code Playgroud)

打印1 8.