string.find()
CoddyのLuaジャーニー「基礎」セクションの一部。レッスン 48/90。
string.find()関数は、文字列内を検索するための強力なツールです。大きな文字列の中から小さな文字列(パターンと呼ばれます)を探し、見つかった位置を正確に教えてくれます。
基本的な構文は次のとおりです。
string.find(text, pattern)string.find()がパターンを正常に見つけると、一致した部分の開始位置と終了位置を示す2つの数値を返します。パターンが見つからない場合は、nilを返します。
簡単な例を見てみましょう。
local sentence = "The treasure is hidden here"
local start_pos, end_pos = string.find(sentence, "treasure")
print(start_pos, end_pos) -- 出力: 5 12この例では、文中の「treasure」という単語は位置5から始まり、位置12で終わります。
知っておくべきことが1つあります。検索するテキストは、普通のテキストではなくパターンです。パターンでは、一部の文字に特別な意味があります。. % - + * ? [ ] ^ $ ( )です。これらについては、コースの後半で学びます。上の例のように、文字、数字、空白はそれ自体に一致しますが、特殊文字は意図した以上に一致することがあります。
print(string.find("Score: 105", "1.5")) -- 出力: 8 10(. は 0 にマッチした)書かれているとおりのテキストを検索するには、引数をさらに2つ追加します。1(最初の文字から検索)とtrue(特殊文字を使わない単純な検索)です。
print(string.find("Score: 105", "1.5", 1, true)) -- 出力: nil
print(string.find("Version 1.5", "1.5", 1, true)) -- 出力: 9 11チャレンジ
簡単大きなテキストメッセージの中に隠されたコードワードを検索する、秘密のメッセージ検出器を作成しましょう。messageという変数を宣言し、値として"The ancient treasure lies beneath the old oak tree"を代入します。string.find()関数を使って、メッセージ内の"treasure"という単語を検索し、開始位置と終了位置をstartPosとendPosという変数に保存します。両方の位置の値を別々の行に出力します。
自分で試してみよう
-- message 変数を宣言する
local message = "The ancient treasure lies beneath the old oak tree"
-- TODO: "treasure" という単語を見つけて位置を保存するコードをここに書く
-- 位置を出力する
print(startPos)
print(endPos)このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ