Menu
Coddy logo textTech

string.match()

CoddyのLuaジャーニー「Logic & Flow」セクションの一部 — レッスン 38/54。

string.find() は文字列内のどこにパターンが現れるかを教えてくれますが、一致した実際のテキストを抽出する必要がある場合もあります。ここで string.match() の出番です。キャプチャと組み合わせることで、さらに強力になります。

キャプチャを使用すると、抽出したいパターンの特定の部分をマークできます。パターンの一部を括弧 () で囲むことで、キャプチャを作成します。string.match() が一致を見つけると、単なる位置ではなく、キャプチャされたテキストを返します。

文字列から数値を抽出する簡単な例を次に示します。

local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number)  -- 出力: 100

パターン%d+は「1つ以上の数字」を意味します。+は、直前の文字クラスの1つ以上の繰り返しに一致する修飾子であり、複数桁の数値をキャプチャできるようにします。

キャプチャを使用して、より複雑なパターンの特定の部分を抽出できます。

local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username)  -- 出力: Alice

ここでは、%a+ を囲む括弧は、"User: " の後に続く一連の文字をキャプチャするように Lua に指示します。パターンの残りの部分は正しい位置を特定するのに役立ちますが、キャプチャされた部分のみが返されます。

パターンに複数のキャプチャがある場合、string.match() はそれらすべてを個別の値として返します。これらは一度に複数の変数に代入することができます。

challenge icon

チャレンジ

簡単

textを受け取り、文字列内に見つかった価格の値を返す関数extractPriceを作成してください。

string.match()をキャプチャパターンと共に使用して、ドル記号の後に続く数値の価格を抽出してください。パターンは%d+を使用して1つ以上の数字をキャプチャする必要があります。

引数:

  • text (string): "Price: $XX" という形式の価格を含む文字列

戻り値: 文字列としての数値の価格 (string)

チートシート

パターンに一致するテキストを抽出するには、string.match() を使用します:

local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number)  -- 出力: 100

+ 修飾子は、直前の文字クラスの1回以上の繰り返しに一致します:

%d+  -- 1つ以上の数字
%a+  -- 1つ以上の文字

パターンの特定の部分を抽出する「キャプチャ」を作成するには、括弧 () を使用します:

local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username)  -- 出力: Alice

複数のキャプチャは、個別の値を返します:

local var1, var2 = string.match(text, "(pattern1)(pattern2)")

自分で試してみよう

function extractPrice(text)
    -- ここにコードを記述してください
end
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン