Lua模式查询

我需要从一个较大的字符串中检测一个单词,比如“约翰是一个好人”。所以我有这个模式来查找单词:

[j][o][h][n]

并将其用作下面这样:

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

为了接受多次出现的字母(例如“约翰是一个好人”),我将模式修改为如下所示:

[j]+[o]+[h]+[n]+

我需要忽略在单词之间可能出现的空格或其他非字母字符(例如“约翰是一个好人”),所以我为每个字母添加了[^a-z]*,结果模式如下:

[j]+[^a-z]*[o]+[^a-z]*[h]+[^a-z]*[n]+[^a-z]*

现在这对于单词“joohn是一个好人”来说是完美的。但是,如果在重复的字母中出现符号,模式就会失败。例如,在“_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))

这将打印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))

仅打印nil。 我需要一个模式,它允许我在场景2中检测到joo!ohn

点赞
用户1442917
用户1442917

以下是翻译好的内容,保留了原本的 markdown 格式:

这应该匹配 “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))

```

输出 1 8

2012-11-20 19:30:04