0Pricing
Lua Academy · レッスン

キャプチャとstring.match

string.matchと()キャプチャを使って文字列からキャプチャグループを抽出します。

「キャプチャとstring.match」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

キャプチャとは

キャプチャは、Luaパターン内で括弧で囲んだサブパターンです。一致したテキストから部分文字列を取り出します。

キャプチャを使ったstring.match

パターンにキャプチャが含まれている場合、string.match は一致全体ではなく、キャプチャした部分文字列を返します。

local date = "2025-01-15"
local y, m, d = date:match("(%d+)-(%d+)-(%d+)")
print(y, m, d)  -- 2025  01  15

単一キャプチャ

単一のキャプチャは、1つの文字列値を返します。

local s = "name: Alice"
local name = s:match("name: (%a+)")
print(name)  -- Alice

複数キャプチャ

複数のキャプチャは、複数の値として返されます。

local pair = "key = value"
local k, v = pair:match("(%w+)%s*=%s*(%w+)")
print(k, v)  -- key  value

位置キャプチャ ()

空のキャプチャ () は、現在の文字列位置を数値としてキャプチャします。

local s = "hello world"
local pos = s:match("()world")
print(pos)  -- 7 (position where world starts)

省略可能なキャプチャ

キャプチャしたグループの後に ? を付けると、省略可能な部分をキャプチャできます。

local s = "http://example.com"
local protocol, host = s:match("(https?)://([^/]+)")
print(protocol, host)  -- http  example.com

キャプチャを使ったstring.find

キャプチャを使った string.find は、開始位置、終了位置、続いてキャプチャした部分文字列を返します。

local s = "phone: 555-1234"
local i, j, num = s:find("phone: (%d+-%d+)")
print(i, j, num)  -- 1  16  555-1234

入れ子になったキャプチャ

キャプチャは入れ子にできます。開き括弧の位置に基づき、左から右の順に番号が付けられます。

local s = "2025-01-15"
local full, year = s:match("((%d%d%d%d)-%d%d-%d%d)")
print(full, year)  -- 2025-01-15  2025

キャプチャのベストプラクティス

分かりやすさのため、名前付き規約に従った変数を使用してください。キャプチャを必要以上に入れ子にしないでください。一致に失敗するとnilが返るため、キャプチャを使用する前に必ず確認してください。

local result = s:match("(%d+)")
if result then print("found:", result)
else print("no match") end

メールアドレスの一致

キャプチャを使った、簡単な(RFC準拠ではない)メールパターンです。

local email = "user@example.com"
local user, domain = email:match("([^@]+)@(.+)")
print(user, domain)  -- user  example.com

すべての一致結果をテーブルに格納

すべての一致結果をテーブルに集めるには、string.gmatch を使用します(次のレッスンで説明します)。

キャプチャの問題

"2025-01-15":match("(%d+)-(%d+)-(%d+)") は何を返しますか。

まとめ:キャプチャとstring.match

パターン内で () を使うと、部分文字列を取り出せます。string.match はキャプチャした値を直接返します。空の () は位置をキャプチャします。一致結果がnilかどうかを必ず確認してください。

よくある質問

「キャプチャとstring.match」レッスンは無料ですか?

はい。「キャプチャとstring.match」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「キャプチャとstring.match」で何を学びますか?

string.matchと()キャプチャを使って文字列からキャプチャグループを抽出します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「キャプチャとstring.match」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Luaパターン構文
  2. キャプチャとstring.match
  3. トークン化のためのstring.gmatch
  4. 変換のためのstring.gsub
← Lua Academyに戻る