string.find()
CoddyのLuaジャーニー「Logic & Flow」セクションの一部 — レッスン 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このパターンは、文字列がアルファベットで始まっているかどうかをチェックするため、特定の形式が必要な入力バリデーションに役立ちます。
チャレンジ
簡単textを受け取り、その文字列が文字で始まっているかどうかを返す関数startsWithLetterを作成してください。
アンカー^と文字クラス%aをstring.find()で使用して、文字列が文字で始まるかどうかを確認してください。
引数:
text(string): 検証する文字列
戻り値: 文字列が文字で始まる場合はtrue、そうでない場合はfalse (boolean)
チートシート
文字列内のパターンを検索するには、文字クラスを指定して string.find() を使用します。これは、パターンが最初に一致した位置を返します。
local text = "User123"
local position = string.find(text, "%d")
print(position) -- 出力: 5大文字の文字クラスは、その逆(一致しない文字)にマッチします:
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- 出力: 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自分で試してみよう
function startsWithLetter(text)
-- ここにコードを記述してください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。