String Lua模式查询

String Lua模式查询,string,lua,lua-patterns,String,Lua,Lua Patterns,我需要从一个更大的字符串中检测一个单词sayjohn,sayjohn是个好人 所以我有这个模式来找到这个词 [j][o][h][n] 并按如下方式使用: local pattern = "[j][o][h][n]" local str = "john is a good man" print(str:find(pattern)) 为了接受多次出现的字母(例如,jooohn是一个好人),我将模式修改为 [j]+[o]+[h]+[n]+ 我需要忽略单词之间可能出现的空格(或其他非字母字符)(

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

[j][o][h][n]
并按如下方式使用:

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

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

[j]+[o]+[h]+[n]+
我需要忽略单词之间可能出现的空格(或其他非字母字符)(例如,joh;n是个好人),因此我向每个字母添加[^a-z]*,结果模式为

[j]+[^a-z]\*[o]+[^a-z]\*[h]+[^a-z]\*[n]+[^a-z]\*
现在这是一个完美的词,像“jooh!n是个好人”。但是如果符号出现在重复字母中,则图案失败。 例如,在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))
这会打印出来
17

但是

将仅打印
nil
我需要一个模式,使我能够检测乔!ohn在场景2中

这应该是“j[j%W]*o[o%W]*h[h%W]*n[n%W]*”:


打印
18

您想实现什么?@lhf我要问的模式将用于从一个大字符串中查找字符串“john”或“john”的修改变体。。这有意义吗?我也更新了这个问题!谢谢!这管用!但我不知道怎么做。保罗,你能解释一下吗?好的,我想
上面的大写版本颠倒了said的含义(即%A---表示所有非字母)。
因此我们查找0或更多的[非字母数字字符或同一字母]。非常感谢!!!由于我只需要字母(而不是字母数字),我将用
%A
替换
%W
@SatheeshJM,是的,你猜对了。提议的改变也应该奏效。
 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))
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))