2

我需要从一个更大的字符串中检测出一个单词say john ,say john is a good man 所以我有这个模式来找到这个词

[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 is a good man),所以我将 [^az]* 添加到每个字母,结果模式是

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

现在这非常适合像“jooh!n is a good man”这样的词。但如果! 符号出现在重复字母中,则模式失败。例如,在jo!ohn is a good man中,没有检测到模式。我如何修改我的模式以实现这一目标?

编辑

例子:

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的模式

4

1 回答 1

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))

打印1 8

于 2012-11-20T19:30:04.237 回答