キャプチャと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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Luaパターン構文
- キャプチャとstring.match
- トークン化のためのstring.gmatch
- 変換のためのstring.gsub