文字列データ型は、文字、数字、記号などのシーケンスです。ほとんどのテキストベースの情報を保存するためのデータ型です。
弦楽器を宣言する
変数を宣言するには、文字の周りに引用符を使用します。ダブル引用符を使用するのが一般的です (") 、しかし、シングル引用符を使用するのもできます (')。如果、文字にシングルまたはダブル引用符を含める必要がある場合は、 escaped 引用文を使用します。
local string1 = "Hello world!"print(string1) --> 世界にこんにちは!local string2 = 'Hello "world"!'print(string2) --> Hello "world"!
単一の引用文字列とダブルの引用文をストリングに含めるか、Multi-line ストリングを作成するには、ダブルブラケットを使用して宣言してください:
local string1 = [[Helloworld!Hello "world"!Hello 'world'!]]print(string1)--> こんにちは--> 世界!--> こんにちは "世界"!--> Hello 'world'!
必要に応じて、同じサインが開始と終了の両方のブラケット内に複数のブラケットをネストできます:
local string1 = [=[Hello[[world!]]]=]print(string1)--> こんにちは--> [[world!]]
弦楽器を組み合わせる
文字列を組み合わせるには、 concatenate を使用して、2つのドット (.. で文字列を結合します。文字列の結合にはスペースを挿入しないので、前の/次の文字列の開始/終了にスペース(s)を含める必要があります。または、空白 を使用して文字列の間のスペースを挿
local hello = "Hello"local helloWithSpace = "Hello "local world = "world!"local string1 = hello .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(string1) --> Helloworld!print(string2) --> 世界にこんにちは!print(string3) --> Hello world!
注意、 print() コマンドは複数の引数を取り、それらを スペースと組み合わせて 、スペースを , ではなく 1> ..1> で出力することができます。
local hello = "Hello"local world = "world"local exclamationMark = "!"print(hello .. world .. exclamationMark) --> Helloworld!print(hello, world .. exclamationMark) --> 世界にこんにちは!print(hello, world, exclamationMark) --> Hello world !
弦楽器を変換
文字列を数値に変換するには、 tonumber() 関数を使用します。文字列に数値が含まれていない場合は、 tonumber() は nil を返します。
local numericString = "123"print(tonumber(numericString)) --> 123local alphanumericString = "Hello123"print(tonumber(alphanumericString)) --> nil
ストリングを脱出する
ダブル引用文またはシングル引用文のデクラレーションから脱出するには、文字の前にバックスラッシュ ( \ ) を入れます。たとえば:
- 単一の引用文を単一の引用文の文字列に挿入するには、\' を使用します。
- ダブル引用をダブル引用文字列に挿入するには、\" を使用します。
local string1 = 'Hello \'world\'!'print(string1) --> こんにちは 'world'!local string2 = "Hello \"world\"!"print(string2) --> Hello "world"!
バックスラッシュをフォローする特定のキャラクターは、逃走したキャラクターではなく、スペシャルキャラクターを生成します:
- 新しい行を挿入するには、\n を使用します。
- 横向きのタブを挿入するには、\t を使用します。
local string1 = "Hello\nworld!"print(string1)--> こんにちは--> 世界!local string2 = "Hello\tworld!"print(string2) --> Hello world!
文字列の変換
Luau は 文字列の変換 をサポートしています。これは、文字列に ` 機能を追加することを可能にします。バックスラッシュ ( ` ) を使用して、変換された文字列を宣言し、カールブリックの中にエクスプレッションを追加します:
local world = "world"local string1 = `Hello {world}!`print(string1) --> Hello world!
変数は最も一般的な使用方法ですが、数学を含むあらゆるエクスプレッションを使用できます:
local world = "world"local number = 1local letters = {"w", "o", "r", "l", "d"}local string1 = `Hello {world}, {number} time!`local string2 = `Hello {world}, {number + 1} times!`local string3 = `Hello {table.concat(letters)} a third time!`print(string1) --> 世界にこんにちは、1回!print(string2) --> 世界にこんにちは、2 回!print(string3) --> Hello world a third time!
バックスラッシュ、カーリーブラケット、バックスラッシュには、標準のエスケープルールが適用されます:
local string1 = `Hello \`\{world\}\`!`print(string1) --> Hello `{world}`!
数学の変換
文字列で数学オペレーションを実行すると、Luau は自動的に文字列を数値に変換します。文字列に数値表示がない場合は、エラーが発生します。
print("55" + 10) --> 65print("55" - 10) --> 45print("55" * 10) --> 550print("55" / 10) --> 5.5print("55" % 10) --> 5print("Hello" + 10) --> print("Hello" + 10):1: attempt to perform arithmetic (add) on string and number
比較
弦楽器は、< 、<=、> 、および 2> >=2> オ
print("Apple" < "apple") --> 真print("Banana" < "apple") --> はい (B は ASCII の前にあります)print("number100" < "number20") --> true
String パターン参照
A 文字パターン は、 string.match() 、 string.gmatch() 、および他の関数を使用して、より長い文字列の一部またはサブストリングを見つけるために使用できる文字の組み合わせです。
ダイレクトマッチ
ルアー関数の直接一致を使用するには、string.match() などの Luau 関数のみを使用できます。ただし、魔法のキャラクター は、ストリング内の Roblox を検索します。たとえば、これらのコマンドは、1>Roblox1> の名前を含むストリング内の 4>文字列4> を検索します。
local match1 = string.match("Welcome to Roblox!", "Roblox")local match2 = string.match("Welcome to my awesome game!", "Roblox")print(match1) --> Robloxprint(match2) --> nil
キャラクタークラス
キャラクタークラスは、より詳細な文字列検索に必要です。文字列を検索するために使用できます。例え、文字列が必ずしもキャラクター関連でなくても、 文字列 、 数字 、 スペース 、 2>ピンクト2> 、およびその他の多くのカテゴリにフィットします。
次の表には、Luau のストリングパターンの公式キャラクタークラスが示されています:
クラス | 代表を表示 | マッチの例 |
---|---|---|
。 | 任意のキャラクター | 32kasGJ1%fTlk?@94 |
%a | 大文字または小文字 | aBcDeFgHiJkLmNoPqRsTuVwXyZ 】 |
%l | 大文字を下矢印 | abcdefghijklmnopqrstuvwxyz |
%u | アルファベットの大文字 | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d | 任意の数字 (数字) | 0123456789 ) |
%p | すべてのピンクトゥーンキャラクター | !@#;、... |
%w | アルファ数字文字 (文字「」または「」) です。 | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 】 |
%s | スペースまたは白紙文字 | 、 \n 、および \r |
%c | 特別な コントロールキャラクター | |
%x | 十六進制文字 | 0123456789ABCDEF |
%z | NULL 文字 ( \0 ) |
単語文字クラス、インスタンスえば %a や %s など、対応するアルファベットはクラスの「反対」を表します。たとえば、 %p はピンクトーンキャラクターを表し、 1> %P1> はすべてのクラスを表しています。
魔法のキャラクター
パターンでは、「魔法の 12 文字」が特別な目的に予約されています:
$ | % | ^ | * | () | ) |
。 | [ | ] | + | - | ? |
魔法のキャラクターを脱出し、検索するには、 % シンボルを使用します。たとえば、 roblox.com を検索するには、 . (期間) シンボルを前に付けて、 1> %1> のように、 4> %4> の上にあります。
-- 「roblox.com」は「roblox#com」と一致します、期間は「任意のキャラクター」として解釈されますlocal match1 = string.match("What is roblox#com?", "roblox.com")print(match1) --> roblox#com-- % で期間をスケープして、文字通りの期間キャラクターとしてインタープリトされるlocal match2 = string.match("I love roblox.com!", "roblox%.com")print(match2) --> roblox.com
アンカー
^ および $ シンボルを使用して、ストリングの開頭または終了にパターンを検索できます。
local start1 = string.match("first second third", "^first") -- 「最初」が開始にあるから一致しますprint(start1) --> 最初local start2 = string.match("third second first", "^first") -- 「最初」が始まりの場合、一致しませんprint(start2) --> なしlocal end1 = string.match("first second third", "third$") -- 「第三」が最終了にあるために一致print(end1) --> 3local end2 = string.match("third second first", "third$") -- 「3」が最終了にあるため、マッチしませんprint(end2) --> nil
また、^ と $ を組み合わせて、パターンが完全な文字列に一致することを確認することもできます。
-- ^ と $ を使用して、完全な文字列で一致するlocal match1 = string.match("Roblox", "^Roblox$") -- 「Roblox」が全体の文字列であるために一致します。print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- 「Roblox」が開始と終了の間にあるため、一致しませんprint(match2) --> なしlocal match3 = string.match("I play Roblox", "Roblox") -- 「Roblox」が「I play Roblox」内に含まれているために一致しますprint(match3) --> Roblox
クラス変更子
自体, a キャラクタークラスは、 1つ のキャラクターをストリングで一致させます。たとえば、次のパターン ( "%d" ) は、左から右にストリングを読み始め、 最初の ディジットを見つけ、停止します。
local match = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match) --> 2
結果をコントロールするために、任意のキャラクタークラスで 変更 を使用できます:
量産機 | 意味 |
---|---|
+ | 前のキャラクタークラスの 1 または複数の一致 |
- | 前のキャラクタークラスの中でできるだけ少なくマッチ |
* | 前のキャラクタークラスの 0 または以上と一致 |
? | 前のキャラクタークラスの 1 または以下に一致 |
%n | For n between 1 and 9 , マッチ substring が捕獲された 1> n1> の等しい子文字列。 |
%bxy | バランスの取れたキャプチャーが一致します x 、 y 、そしてその間のすべて (たとえば、 %b() は親子のペアとその間のすべてを一致させます) |
同じパターン ( "%d+" で変更子を追加する代わりに、"%d" を出力します。25 ではなく、1> 21> :
local match1 = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match1) --> 2local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")print(match2) --> 25
クラスセット
Sets は、単一のキャラクタークラスがすべての作業を行うことができない場合に使用する必要があります。たとえば、%l と ピンクトゥルピンクトゥルピンクトゥルピンクトゥルピンクトゥルピンクトゥルピンクトゥルピンクトゥルピンクト��
セットは、ブラケット [] 以下に定義されています。次の例では、セットを使用する ( "[%l%p]+" ) と、使用しない ( #%l%p+ ) の違いに気づきましょう。
local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- セットprint(match1) --> こんにちは!!!local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- 非設定print(match2) --> o!!!
最初のコマンド (se設定する) は、Luau に、両方の大文字字符とピンクトリーを見つけるようにと命じます。全設定するのセット後に追加された + 量子器により、これらの文字のすべてを見つけます (ello!!!)、スペースに到達すると停止します。
第2コマンド (非設定) では、 + 量子器は、%p クラス以前のクラスにのみ適用され、 Luau は連続のピンクスペルを含む最初の下矢印クラス ( o ) を持つことができます。
キャラクタークラスと同様、セットは自分自身の「反対」になることができます。これは、開始 ^ の直後に [ の文字を追加することで行われます。たとえば、 "[%p%s]+" は、全
また、 範囲 を設定することで、開始と終了のキャラクターの間の完全な一致を見つけることができます。これは、Lua 5.1 マニュアル で説明されている高度な機能です。
ストリングキャプチャー
String captures はパターン内の子パターンです。これらは親タグ () で囲まれており、マッチする子文字列を取得し、変数に保存されます。たとえば、次のパターンには、 (%a+) と、 1> percentd+1> が含まれており、
local pattern = "(%a+)%s?=%s?(%d+)"local key1, val1 = string.match("TwentyOne = 21", pattern)print(key1, val1) --> TwentyOne 21local key2, val2 = string.match("TwoThousand= 2000", pattern)print(key2, val2) --> TwoThousand 2000local key3, val3 = string.match("OneMillion=1000000", pattern)print(key3, val3) --> OneMillion 1000000
前のパターンで、 %s クオンティファイヤーは、両方の = クラスをフォローする安全な追加であり、スペースの両側のサインがオプションであるため、マッチが成功します。これは、1>=1> サインの周りの空き地が 1つ (または両方) がない場合に成
String キャプチャーは、次の例として ネスト できます:
local places = "The Cloud Kingdom is heavenly, The Forest Kingdom is peaceful"local pattern = "(The%s(%a+%sKingdom)[%w%s]+)"for description, kingdom in string.gmatch(places, pattern) doprint(description)print(kingdom)end--> クラウドキングダムは天国だ--> クラウドキングダム--> 森林王国は平和です--> Forest Kingdom
このパターン検索は以下のように機能します:
Library.string.gmatch() イテレーターは、外の親子のペアによって定義された「説詳細」パターン全体でマッチを検索します。これは、最初のコマで停止し、次のをキャプチャします:
# | パターン | キャプチャ |
---|---|---|
1 | (%s%a+%sKingdom) | クラウドキングダムは天国だ |
その成功した最初のキャプチャーを使用して、イテレーターは「キングダム」パターンを定義する内側のパーツのペアによって定義されたマッチを検索します。このネストされたパターンは、フォロー中のものを単にキャプチャします:
# | パターン | キャプチャ |
---|---|---|
2 | (%a+%sKingdom) | クラウドキングダム |
その後、イテレーターがバックアウトし、次の全文字列を検索し、次のを捕獲します:
# | パターン | キャプチャ |
---|---|---|
3 | (%s%a+%sKingdom) | 森林王国は平和です |
4 | (%a+%sKingdom) | 森林の王国 |
上記のすべてに加えて、 空のキャプチャ ( () )があります。キャプチャが空の場合、ストリングの位置がキャプチャされます:
local match1 = "Where does the capture happen? Who knows!"local match2 = "This string is longer than the first one. Where does the capture happen? Who knows?!"local pattern = "()Where does the capture happen%? Who knows!()"local start1, finish1 = string.match(match1, pattern)print(start1, finish1) --> 1 42local start2, finish2 = string.match(match2, pattern)print(start2, finish2) --> 43 84
これらの特別なキャプチャーは、通常のキャプチャーとネストされる可能性があります:
local places = "The Cloud Kingdom is heavenly, The Forest Kingdom is peaceful."local pattern = "The (%a+()) Kingdom is %a+"for kingdom, position in string.gmatch(places, pattern) doprint(kingdom, position)end--> クラウド 10--> Forest 42
返された値は、 数値 であるため、文字列ではありません。
local match = "This is an example"local pattern = "This is an ()example"local position = string.match(match, pattern)print(typeof(position)) --> number