string.gmatch() による反復処理
CoddyのLuaジャーニー「ロジックと制御フロー」セクションの一部。レッスン 39/54。
string.match() はパターンの最初の出現箇所を見つけますが、文字列内のすべての一致を見つける必要がある場合はどうすればよいでしょうか? string.gmatch() function は、for ループで使用して各一致を1つずつ処理できるイテレーターを返すことで、この問題を解決します。
基本的な構文は次のようになります:
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を受け取り、テキスト内で見つかったすべてのハッシュタグをそれぞれ別の行に返すfunction extractHashtagsを記述してください。
string.gmatch()を使用して、テキスト内のすべてのハッシュタグを見つけてください。ハッシュタグは#で始まり、その後に1文字以上の英字が続きます。
ロジック:
- パターン
"#%a+"を指定したstring.gmatch()を使用して、すべてのハッシュタグを見つける - 各
matchを反復処理して収集する - すべてのハッシュタグを改行文字(
\n)で結合する - ハッシュタグが見つからない場合は、空の
stringを返す
パラメーター:
text(string): ハッシュタグを検索する対象のテキスト
戻り値: 見つかったすべてのハッシュタグを、それぞれ別の行にしたもの。ハッシュタグが存在しない場合は、空のstringを返します(string)
自分で試してみよう
function extractHashtags(text)
-- ここにコードを書いてください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックと制御フローのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ