สตริง

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ประเภทข้อมูล สตริง คือชุดของตัวอักษร เช่น ตัวอักษร ตัวเลข และสัญลักษณ์ มันเป็นประเภทข้อมูลสำหรับเก็บข้อมูลที่เป็นข้อความส่วนใหญ่

ประกาศสตริง

ในการประกาศตัวแปรสตริง ให้ใส่เครื่องหมายคำพูดรอบตัวอักษร มักจะใช้เครื่องหมายคำพูดคู่ ("), แต่เครื่องหมายคำพูดเดี่ยว (') ก็ใช้งานได้เช่นกัน หากคุณต้องการใส่เครื่องหมายคำพูดเดี่ยวหรือคู่ในสตริงของคุณ ให้ใช้สตริงในประเภทของเครื่องหมายคำพูดที่แตกต่างกัน หรือใช้ เครื่องหมายคำพูดที่ถูกเอาออก.


local string1 = "Hello world!"
print(string1) --> Hello world!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

หากต้องการรวมเครื่องหมายคำพูดเดี่ยวและคู่ในสตริงเดียวกัน หรือสร้างสตริงหลายบรรทัด ให้ประกาศใช้งานโดยใช้วงเล็บคู่:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Hello
--> world!
--> Hello "world"!
--> Hello 'world'!

หากจำเป็นสามารถซ้อนวงเล็บหลายตัวภายในสตริงโดยใช้จำนวนสัญลักษณ์เท่ากันในทั้งวงเล็บเริ่มต้นและวงเล็บสุดท้าย:


local string1 = [=[Hello
[[world!]]
]=]
print(string1)
--> Hello
--> [[world!]]

รวมสตริง

ในการรวมสตริง ให้ การต่อ สตริงด้วยจุดสองจุด (..) การต่อสตริงจะไม่แทรกเว้นว่างระหว่างสตริง ดังนั้นคุณต้องใส่ช่องว่างที่ส่วนท้าย/ส่วนเริ่มต้นของสตริงที่มีมาก่อน/หลักหรือต้องรวมช่องว่างระหว่างสองสตริง


local hello = "Hello"
local helloWithSpace = "Hello "
local world = "world!"
local string1 = hello .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(string1) --> Helloworld!
print(string2) --> Hello world!
print(string3) --> Hello world!

โปรดทราบว่า คำสั่ง print() รับพารามิเตอร์หลายตัวและรวมเข้าด้วยกัน ด้วย ช่องว่าง ดังนั้นคุณสามารถใช้ , แทน .. เพื่อให้ได้ช่องว่างในผลลัพธ์ print()


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Helloworld!
print(hello, world .. exclamationMark) --> Hello world!
print(hello, world, exclamationMark) --> Hello world !

แปลงสตริง

ในการแปลงสตริงเป็นตัวเลข ใช้ฟังก์ชัน tonumber() หากสตริงไม่มีการแสดงผลจำนวน ฟังก์ชัน tonumber() จะส่งกลับค่า nil.


local numericString = "123"
print(tonumber(numericString)) --> 123
local alphanumericString = "Hello123"
print(tonumber(alphanumericString)) --> nil

การเอาสตริง

ในการเอาคำพูดคู่หรือเดี่ยวในการประกาศสตริง และฝังเกือบทุกตัวอักษร ให้ใส่เครื่องหมายกลับ (\) ก่อนตัวอักษร เช่น:

  • เพื่อฝังเครื่องหมายคำพูดเดี่ยวในสตริงเครื่องหมายคำพูดเดี่ยว ให้ใช้ \'.
  • เพื่อฝังเครื่องหมายคำพูดคู่ในสตริงเครื่องหมายคำพูดคู่ ให้ใช้ \".

local string1 = 'Hello \'world\'!'
print(string1) --> Hello 'world'!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

ตัวอักษรบางตัวที่ตามหลังเครื่องหมายย้อนจะผลิตตัวอักษรพิเศษแทนที่จะเป็นตัวอักษรที่ถูกเอาออก:

  • เพื่อฝังบรรทัดใหม่ ใช้ \n.
  • เพื่อฝังแท็บแนวนอน ใช้ \t.

local string1 = "Hello\nworld!"
print(string1)
--> Hello
--> world!
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 = 1
local 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) --> Hello world, 1 time!
print(string2) --> Hello world, 2 times!
print(string3) --> Hello world a third time!

กฎการเอาคืนมาตรฐานใช้ได้สำหรับแบ็คติค วงเล็บปีกกา และเครื่องหมายกลับ:


local string1 = `Hello \`\{world\}\`!`
print(string1) --> Hello `{world}`!

การแปลงทางคณิตศาสตร์

หากคุณทำการดำเนินการทางคณิตศาสตร์กับสตริง Luau จะทำการแปลงสตริงเป็นตัวเลขโดยอัตโนมัติ หากสตริงไม่มีการแสดงผลจำนวน มันจะทำให้เกิดข้อผิดพลาด


print("55" + 10) --> 65
print("55" - 10) --> 45
print("55" * 10) --> 550
print("55" / 10) --> 5.5
print("55" % 10) --> 5
print("Hello" + 10) --> print("Hello" + 10):1: attempt to perform arithmetic (add) on string and number

การเปรียบเทียบ

สามารถเปรียบเทียบสตริงได้ด้วยการใช้ตัวดำเนินการ <, <=, >, และ >= ซึ่งจะเปรียบเทียบตามลำดับพจนานุกรมตามรหัส ASCII ของตัวอักษรแต่ละตัวในสตริง สิ่งนี้จะทำให้ตัวเลขในสตริงไม่ถูกเปรียบเทียบอย่างถูกต้อง เช่น "100" จะน้อยกว่า "20" เนื่องจากไบต์ "0" และ "1" มีรหัส ASCII ที่ต่ำกว่าไบต์ "2".


print("Apple" < "apple") --> true
print("Banana" < "apple") --> true (B อยู่ก่อนไป a ใน ASCII)
print("number100" < "number20") --> true

อ้างอิงรูปแบบสตริง

รูปแบบ สตริง คือการรวมกันของตัวอักษรที่คุณสามารถใช้กับ string.match(), string.gmatch(), และฟังก์ชันอื่นๆ เพื่อ ค้นหาชิ้นส่วน หรือซับสตริง ของสตริงที่ยาวกว่า

การจับคู่โดยตรง

คุณสามารถใช้การจับคู่โดยตรงในฟังก์ชัน Luau เช่น string.match() ยกเว้น อักขระพิเศษ ตัวอย่างเช่น คำสั่งเหล่านี้ จะค้นหาคำว่า Roblox ภายในสตริง:


local match1 = string.match("Welcome to Roblox!", "Roblox")
local match2 = string.match("Welcome to my awesome game!", "Roblox")
print(match1) --> Roblox
print(match2) --> nil

คลาสตัวอักษร

คลาสตัวอักษรนั้นจำเป็นสำหรับการค้นหาสตริงที่ซับซ้อนขึ้น คุณสามารถใช้ พวกเขาเพื่อค้นหาสิ่งที่ไม่จำเป็นต้องเฉพาะเจาะจงในตัวอักษร แต่ อยู่ในหมวดหมู่ที่รู้จัก (คลาส) รวมถึง ตัวอักษร, ตัวเลข, ช่องว่าง, เครื่องหมายวรรคตอน, และอื่นๆ

ตารางต่อไปนี้แสดงคลาสตัวอักษรอย่างเป็นทางการสำหรับรูปแบบสตริงของ Luau:

คลาสแสดงถึงตัวอย่างการจับคู่
.ตัวอักษรใดๆ32kasGJ1%fTlk?@94
%aตัวอักษรตัวใหญ่หรือเล็กaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lตัวอักษรตัวเล็กabcdefghijklmnopqrstuvwxyz
%uตัวอักษรตัวใหญ่ABCDEFGHIJKLMNOPQRSTUVWXYZ
%dตัวเลขใดๆ0123456789
%pเครื่องหมายวรรคตอนใดๆ!@#;,.
%wตัวอักษรที่เป็นอัลฟาเบต (ตัวอักษร หรือ ตัวเลข)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sช่องว่างหรืออักขระว่าง , \n, และ \r
%cอักขระควบคุมพิเศษ control character
%xอักขระฐานสิบหก0123456789ABCDEF
%zอักขระ NULL (\0)

สำหรับคลาสตัวอักษรที่มีตัวอักษรเดียวเช่น %a และ %s ตัวอักษรตัวใหญ่ที่ตรงกันจะแสดงถึง "ตรงกันข้าม" ของคลาส เช่น %p แสดงถึงเครื่องหมายวรรคตอน ในขณะที่ %P แสดงถึงตัวอักษรทั้งหมดโดยไม่มีเครื่องหมายวรรคตอน

อักขระพิเศษ

มีอักขระ "พิเศษ" 12 ตัวที่สงวนไว้เพื่อวัตถุประสงค์พิเศษในรูปแบบ:

$%^*()
.[]+-?

คุณสามารถเอาออกและค้นหาอักขระพิเศษโดยใช้สัญลักษณ์ % ตัวอย่างเช่น หากคุณต้องการค้นหา roblox.com สามารถเอาเครื่องหมาย . (จุด) โดยการใส่ % ข้างหน้า เช่น %.


-- "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") -- ตรงกันเพราะ "first" อยู่ที่จุดเริ่มต้น
print(start1) --> first
local start2 = string.match("third second first", "^first") -- ไม่ตรงกันเพราะ "first" ไม่อยู่ที่จุดเริ่มต้น
print(start2) --> nil
local end1 = string.match("first second third", "third$") -- ตรงกันเพราะ "third" อยู่ที่ตอนท้าย
print(end1) --> third
local end2 = string.match("third second first", "third$") -- ไม่ตรงกันเพราะ "third" ไม่อยู่ที่ตอนท้าย
print(end2) --> nil

คุณยังสามารถใช้ทั้ง ^ และ $ ร่วมกันเพื่อให้แน่ใจว่ารูปแบบตรงกันเฉพาะกับสตริงทั้งหมดและไม่เพียงแค่บางส่วน


-- การใช้ทั้ง ^ และ $ เพื่อตรงกันข้ามทั้งสตริง
local match1 = string.match("Roblox", "^Roblox$") -- ตรงกันเพราะ "Roblox" คือสตริงทั้งหมด (ความเท่าเทียมกัน)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- ไม่ตรงกันเพราะ "Roblox" ไม่อยู่ที่เริ่มต้นและจบ
print(match2) --> nil
local match3 = string.match("I play Roblox", "Roblox") -- ตรงกันเพราะ "Roblox" อยู่ภายใน "I play Roblox"
print(match3) --> Roblox

ตัวแก้ไขชนิด

โดยตัวมันเอง คลาสตัวอักษรจะจับคู่เพียง หนึ่ง ตัวอักษรในสตริง สำหรับ เช่น รูปแบบต่อไปนี้ ("%d") เริ่มอ่านสตริงจากซ้ายไปขวา ค้นหาหมายเลข แรก (2) และหยุด


local match = string.match("The Cloud Kingdom has 25 power gems", "%d")
print(match) --> 2

คุณสามารถใช้ ตัวแก้ไข กับคลาสตัวอักษรที่ใดก็ได้เพื่อควบคุมผลลัพธ์:

ตัวจำนวนความหมาย
+ตรงกัน 1 หรือมากกว่าของคลาสตัวอักษรก่อนหน้า
-ตรงกันน้อยที่สุดของคลาสตัวอักษรก่อนหน้า
*ตรงกัน 0 หรือมากกว่าของคลาสตัวอักษรก่อนหน้า
?ตรงกัน 1 หรือไม่มากกว่าของคลาสตัวอักษรก่อนหน้า
%nสำหรับ n ระหว่าง 1 และ 9, ตรงกับซับสตริงที่เท่ากับ n ที่ถูกจับคู่
%bxyการจับคู่ที่สมดุลที่ตรงกับ x, y, และสิ่งที่อยู่ระหว่าง (เช่น %b() ตรงกับคู่ของวงเล็บและสิ่งที่อยู่ระหว่าง)

การเพิ่มตัวแก้ไขไปยังรูปแบบเดียวกัน ("%d+" แทน "%d"), จะได้ 25 แทนที่จะเป็น 2:


local match1 = string.match("The Cloud Kingdom has 25 power gems", "%d")
print(match1) --> 2
local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")
print(match2) --> 25

ชุดตัวอักษร

ชุด ควรใช้เมื่อคลาสตัวอักษรเดียวไม่สามารถทำทั้งหมดได้ สมมุติว่าคุณต้องการจับคู่ทั้งตัวอักษรตัวเล็ก (%l) และ เครื่องหมายวรรคตอน (%p) โดยใช้รูปแบบเดียว

ชุดจะถูกกำหนดโดยมีการใช้วงเล็บ [] รอบๆ ตัวอักษร ในตัวอย่างต่อไปนี้ สังเกตความแตกต่างระหว่างการใช้ชุด ("[%l%p]+") และ ไม่ ใช้ชุด ("%l%p+").


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- ชุด
print(match1) --> ello!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- ไม่ชุด
print(match2) --> o!!!

คำสั่งแรก (ชุด) บอกให้ Luau ค้นหาตัวอักษรตัวเล็กและเครื่องหมายวรรคตอน โดยใช้ + เพิ่มหลังจากชุดทั้งหมด ทำให้มันพบ ทั้งหมด ของอักขระนั้น (ello!!!), หยุดเมื่อมันถึงช่องว่าง.

ในคำสั่งที่สอง (ไม่ชุด), ตัวเลข + ใช้เพียงเพื่อ %p คลาสก่อนหน้า ดังนั้น Luau จึงเพียงแค่ดึงตัวอักษรตัวเล็กแรก (o) ก่อนจะเจอกับเครื่องหมายวรรคตอน (!!!).

เหมือนกับคลาสตัวอักษร ชุดสามารถเป็น "ตรงกันข้าม" ของตัวเอง ได้ โดยการเพิ่มอักขระ ^ ที่ด้านหน้าอย่างใกล้ชิดกับ [ แรก สำหรับตัวอย่าง "[%p%s]+" แสดงถึงทั้งเครื่องหมายวรรคตอนและช่องว่าง ในขณะที่ "[^%p%s]+" แสดงถึงตัวอักษรทั้งหมด ยกเว้น เครื่องหมายวรรคตอนและช่องว่าง.

ชุดยังสนับสนุน ช่วง ที่ช่วยให้คุณค้นหาช่วงทั้งหมด ระหว่างตัวอักษรเริ่มต้นและตัวอักษรสุดท้าย ฟีเจอร์นี้เป็นฟีเจอร์ขั้นสูงซึ่ง ได้รับการอธิบายอย่างละเอียดใน Lua 5.1 Manual.

การจับคู่สตริง

การจับคู่สตริง จับคู่ เป็นซับแพทเทิร์นภายในรูปแบบ เหล่านี้ถูกครอบคลุม ในวงเล็บ () และใช้เพื่อให้ได้ (จับคู่) ซับสตริงที่ตรงกันและบันทึก ไปยังตัวแปร ตัวอย่างเช่น รูปแบบต่อไปนี้มีการจับคู่สองครั้ง, (%a+) และ (%d+) ซึ่งส่งคืนซับสตริงสองตัวเมื่อมีการจับคู่สำเร็จ.


local pattern = "(%a+)%s?=%s?(%d+)"
local key1, val1 = string.match("TwentyOne = 21", pattern)
print(key1, val1) --> TwentyOne 21
local key2, val2 = string.match("TwoThousand= 2000", pattern)
print(key2, val2) --> TwoThousand 2000
local key3, val3 = string.match("OneMillion=1000000", pattern)
print(key3, val3) --> OneMillion 1000000

ตัวแก้ไข ? ที่ตามหลัง %s ทั้งสองคลาสเป็นการเพิ่มความปลอดภัย เพราะมันทำให้ช่องว่างทั้งสองด้านของเครื่องหมาย = เป็นออปชัน จึงทำให้ การจับคู่สำเร็จหากช่องว่าง (หรือทั้งสอง) ขาดหายไปรอบเครื่องหมายเท่ากัน

ในฟังก์ชัน string.gsub() คุณสามารถรวมกลุ่มการจับคู่ในการ เปลี่ยนแปลงซึ่งใช้ %1, %2, %3, ฯลฯ ไปถึง %9 แม้ว่าจริง ๆ แล้ว Luau สนับสนุนถึง 32 กลุ่มการจับคู่ก่อนที่จะเกิดข้อผิดพลาด แต่คุณสามารถอ้างอิง ถึงแค่เก้ากลุ่มแรกด้วยไวยากรณ์นี้:


local str = "love2play Roblox"
local pattern = "(%w+)(%d+)(%w+)%s+(%w+)"
local replacement = "I %1 %2 %3 %4!"
local result = string.gsub(str, pattern, replacement)
print(result) --> I love 2 play Roblox!

คุณยังสามารถซ้อนการจับสตริงได้:


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) do
print(description)
print(kingdom)
end
--> The Cloud Kingdom is heavenly
--> Cloud Kingdom
--> The Forest Kingdom is peaceful
--> Forest Kingdom

การค้นหารูปแบบนี้จะทำงานตามนี้:

ตัววนซ้ำ string.gmatch() จะมองหาการจับคู่ในแบบ "คำอธิบาย" ที่กำหนดโดยวงเล็บนอก นี่จะหยุดที่ เครื่องหมายจุลภาคแรกและจับคู่สิ่งต่อไปนี้:

#รูปแบบจับคู่
1(The%s(%a+%sKingdom)[%w%s]+)The Cloud Kingdom is heavenly

ใช้การจับคู่แรกที่ประสบความสำเร็จ ตัววนซ้ำจะมองหาการจับคู่ใน "ราชอาณาจักร" ที่กำหนดโดยวงเล็บใน ตัวแบบที่ซ้อนจะจับคู่ตามนี้:

#รูปแบบจับคู่
2(%a+%sKingdom)Cloud Kingdom

จากนั้นตัววนซ้ำจะถอยออกมาและจะทำการค้นหาต่อในสตริงทั้งหมด จับคู่ตามนี้:

#รูปแบบจับคู่
3(The%s(%a+%sKingdom)[%w%s]+)The Forest Kingdom is peaceful
4(%a+%sKingdom)Forest Kingdom

นอกเหนือจากทั้งหมดข้างต้น มีกรณีพิเศษที่เกี่ยวข้องกับ การจับข้อมูลเปล่า (()). หากการจับคู่นั้นว่างเปล่า ตำแหน่งในสตริงจะถูกจับได้:


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 42
local 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) do
print(kingdom, position)
end
--> Cloud 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
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ