2

大きな文字列から「ジョン」という単語を検出する必要があります。「ジョンはいい人だ」と言う ので、このパターンで単語を見つけます。

[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はいい人です)、各文字に[^ az] *を追加すると、結果のパターンは次のようになります。

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

これは印刷されます 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))

シナリオ2でjoo!ohnnil を検出できるパターンが必要な場合のみ印刷します

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 に答える