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 (. は任意の文字にマッチする)チャレンジ
簡単textを受け取り、文字列が英字で始まるかどうかを返す関数startsWithLetterを書きましょう。
アンカー^と文字クラス%aを使ってstring.find()で、文字列が英字で始まるかどうかを確認しましょう。
パラメーター:
text(文字列):検証する文字列
戻り値:文字列が英字で始まる場合はtrue、そうでない場合はfalse(ブール値)
自分で試してみよう
function startsWithLetter(text)
-- ここにコードを書いてください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとプログラムの流れのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ