Menu
CoddyTech

string.find()

CoddyのLuaジャーニー「ロジックとプログラムの流れ」セクションの一部。レッスン 37/54。

文字クラスを理解したので、string.find()と組み合わせて、完全に一致するテキストではなくパターンを検索できます。これにより、テキストの検証や分析に大きな可能性が広がります。

string.find()関数は、パターンを使う場合もリテラル文字列と同じように動作します。パターンが最初に一致する位置を返します。

local text = "User123"
local position = string.find(text, "%d")
print(position)  -- 出力: 5

これにより文字列内の最初の数字が見つかります。位置は5です。大文字の文字クラスを使って、反対のものを検索することもできます。

local code = "ABC123"
local position = string.find(code, "%D")
print(position)  -- 出力: 1

ここでは、%Dは数字以外の任意の文字に一致するため、位置1にある最初の文字を見つけます。

よくある検証作業の一つは、文字列が特定のパターンで始まるかどうかを確認することです。パターンの先頭にアンカー ^ を使うと、文字列の先頭だけに一致させることができます。

local username = "player42"
local startsWithLetter = string.find(username, "^%a")

if startsWithLetter then
    print("Valid username")
else
    print("Username must start with a letter")
end

このパターンは文字列が英字で始まるかどうかを確認するため、特定の形式が必要な入力検証に役立ちます。

ドットなどの特殊文字そのものを検索するには、%でエスケープするか、通常の検索でパターンを無効にします(最初の文字から検索するには1、通常の検索にはtrueを指定します)。

print(string.find("v1.5", "%."))         -- 出力: 3 3
print(string.find("v1.5", ".", 1, true))  -- 出力: 3 3
print(string.find("v1.5", "."))          -- 出力: 1 1 (. は任意の文字にマッチする)
challenge icon

チャレンジ

簡単

textを受け取り、文字列が英字で始まるかどうかを返す関数startsWithLetterを書きましょう。

アンカー^と文字クラス%aを使ってstring.find()で、文字列が英字で始まるかどうかを確認しましょう。

パラメーター:

  • text(文字列):検証する文字列

戻り値:文字列が英字で始まる場合はtrue、そうでない場合はfalse(ブール値)

自分で試してみよう

function startsWithLetter(text)
    -- ここにコードを書いてください
end
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとプログラムの流れのすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ