【问题标题】:Lua patterns queryLua模式查询
【发布时间】:2012-11-08 21:11:38
【问题描述】:

我需要从一个较大的字符串中检测出一个单词说 john,说 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

【问题讨论】:

  • 你想达到什么目的?
  • @lhf 我要问的模式将用于从大字符串中查找字符串“john”或“john”的修改变体。这有意义吗?我也更新了问题!

标签: string lua lua-patterns


【解决方案1】:

应该这样做"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

【讨论】:

  • 非常感谢!这行得通!但我不知道怎么做。你介意保罗解释一下吗?
  • 好的,我想通了.. The upper cased version of the above reverses the meaning of said (i.e. %A --- represents all non-letters). 所以我们寻找 0 个或多个 [非字母数字字符或相同的字母] 非常感谢 Paul!!!
  • 因为我只想要字母(而不是字母数字),所以我会将%W 替换为%A
  • @SatheeshJM,是的,你猜对了。提议的更改也应该有效。
猜你喜欢
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2014-06-28
  • 1970-01-01
  • 2013-01-19
  • 2014-10-12
  • 2015-02-07
相关资源
最近更新 更多