文字列パターンの基礎
CoddyのLuaジャーニー「Logic & Flow」セクションの一部 — レッスン 36/54。
前のレッスンで string.gsub() を使用したときは、スペースや特定の単語などの正確なテキストを検索しました。しかし、正確な文字がわからなくても「任意の数字」や「任意の文字」を探したい場合はどうすればよいでしょうか?そこで登場するのが文字列パターンです。
Luaにおける文字列パターンは、探しているテキストそのものではなく、どのような種類のテキストを探しているかを記述する方法です。これらは正規表現よりも単純ですが、ほとんどのテキスト処理タスクには十分なほど強力です。
Luaは、文字のカテゴリに一致する文字クラスと呼ばれる特殊なコードを提供しています。以下は、最も一般的なものです:
%d -- 任意の数字 (0-9) に一致します
%a -- 任意の文字 (a-z, A-Z) に一致します
%s -- 任意の空白文字 (スペース、タブ、改行) に一致します
%w -- 任意の英数字 (文字と数字) に一致します
%p -- 任意の句読点文字に一致しますこれらのパターンを string.find() と共に使用して、文字列内の最初の数字を見つける方法は次のとおりです:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- 出力: 6これらのクラスの大文字バージョンを使用して、逆の条件に一致させることもできます。例えば、%D は数字でない任意の文字に一致し、%A は文字でない任意の文字に一致します。
チャレンジ
簡単textを受け取り、そのテキストに少なくとも1つの数字が含まれているかどうかを返す関数containsDigitを作成してください。
string.find()を%d文字クラスと共に使用して、文字列内に数字が存在するかどうかを確認してください。
引数:
text(string): 数字が含まれているか確認するテキスト
戻り値: テキストに少なくとも1つの数字が含まれている場合はtrue、そうでない場合はfalse (boolean)
チートシート
Luaの文字列パターンは、探しているテキストそのものではなく、どのような種類のテキストを探しているかを記述します。
Luaは、文字のカテゴリに一致する文字クラスと呼ばれる特別なコードを提供しています:
%d -- 任意の数字 (0-9) に一致
%a -- 任意の文字 (a-z, A-Z) に一致
%s -- 任意の空白文字 (スペース、タブ、改行) に一致
%w -- 任意の英数字 (文字と数字) に一致
%p -- 任意の句読点文字に一致大文字バージョンを使用すると、その反対に一致させることができます。例えば、%D は数字でない任意の文字に一致し、%A は文字でない任意の文字に一致します。
string.find() で文字クラスを使用する:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- 出力: 6自分で試してみよう
function containsDigit(text)
-- ここにコードを記述してください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。