string.gmatch() による反復処理
CoddyのLuaジャーニー「Logic & Flow」セクションの一部 — レッスン 39/54。
string.match() はパターンの最初の出現箇所を見つけますが、文字列内のすべてのマッチを見つける必要がある場合はどうすればよいでしょうか? string.gmatch() 関数は、for ループで使用できるイテレータを返すことでこれを解決し、各マッチを一つずつ処理できるようにします。
基本的な構文は次のようになります:
for match in string.gmatch(text, pattern) do
-- 各マッチを処理する
end文字列内のすべての数字を検索する例を次に示します:
local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
print(number)
end
-- 出力:
-- 3
-- 5パターン %d+ は1つ以上の数字に一致し、見つかった各数値に対してループが1回実行されます。
文章からすべての単語を抽出することもできます:
local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- 出力:
-- Lua
-- is
-- a
-- powerful
-- languageチャレンジ
簡単text を受け取り、テキスト内で見つかったすべてのハッシュタグをそれぞれ別の行に返却する関数 extractHashtags を作成してください。
string.gmatch() を使用して、テキスト内のすべてのハッシュタグを見つけます。ハッシュタグは # で始まり、その後に1つ以上の文字が続きます。
ロジック:
- パターン
"#%a+"を指定したstring.gmatch()を使用して、すべてのハッシュタグを見つけます - 各一致を反復処理して収集します
- すべてのハッシュタグを改行文字 (
\n) で結合します - ハッシュタグが見つからない場合は、空の文字列を返します
パラメータ:
text(string): ハッシュタグを検索するテキスト
戻り値: 見つかったすべてのハッシュタグ(各ハッシュタグは個別の行に配置)。ハッシュタグが存在しない場合は、空の文字列を返します (string)
チートシート
string.gmatch() 関数は、文字列内のパターンのすべての出現箇所を検索するイテレータを返し、for ループで各一致を処理できるようにします。
基本的な構文:
for match in string.gmatch(text, pattern) do
-- 各一致を処理する
endすべての数字を検索する例:
local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
print(number)
end
-- 出力:
-- 3
-- 5すべての単語を抽出する例:
local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- 出力:
-- Lua
-- is
-- a
-- powerful
-- language自分で試してみよう
function extractHashtags(text)
-- ここにコードを記述してください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。