大きな文字列から「ジョン」という単語を検出する必要があります。「ジョンはいい人だ」と言う ので、このパターンで単語を見つけます。
[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
を検出できるパターンが必要な場合のみ印刷します