สตริง

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

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

การระบุสตริง

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


local string1 = "Hello world!"
print(string1) --> สวัสดีโลก!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

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


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> สวัสดี
--> โลก!
--> สวัสดี "โลก"!
--> Hello 'world'!

หากจำเป็น คุณสามารถเรียงร้อยตัวอักษรหลายตัวในสตริงโดยใช้จำนวนเท่ากันของเครื่องหมายที่เท่ากันในทั้งตัวอักษรเริ่มต้นและตัวอักษรสิ้นสุด:


local string1 = [=[Hello
[[world!]]
]=]
print(string1)
--> สวัสดี
--> [[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) --> สวัสดีโลก!
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)) --> 123
local alphanumericString = "Hello123"
print(tonumber(alphanumericString)) --> nil

หลบห่วง

เพื่อหลบหลีกการระบุตัวอักษรคู่หรือเดียวของประกาศข้อความและอีมบร็อดเกือบทุกตัวอักษร ใส่ตัวอักษรหลังจุลภาค ( \ ) ก่อนตัวอักษร

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

local string1 = 'Hello \'world\'!'
print(string1) --> สวัสดี 'โลก'!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

ตัวละครบางตัวที่ติดตาม backslashes จะผลิตตัวละครพิเศษแทนที่จะเป็นตัวละครที่หลบหนี

  • เพื่อใส่ชุดสูตรใหม่ ใช้ \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 = 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) --> สวัสดีโลก 1 ครั้ง!
print(string2) --> สวัสดีโลก 2 ครั้ง!
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

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

สตริงสามารถเปรียบเทียบได้โดยใช้ตัวประกอบที่ใช้ < ,


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

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

รูปแบบสตริง เป็นคอมบินชันของตัวอักษรที่คุณสามารถใช้ได้กับ Library.string.ตรงกัน() , Library.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ตัวอักษรอักขระ alfanumeric (เช่นตัวอักษร หรือ ตัวเลข)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 เพิ่มเติม
%sตัวอักษรพื้นที่หรือตัวอักษรขาว และ และ แรงโน้มถ่วง
%cตัวละคร ควบคุมพิเศษ
%xตัวอักษรแปดสิบหกเหลี่ยม0123456789ABCDEF
%zตัวอักษร NULL ( \0 )

สำหรับคลาสตัวอักษรเดี่ยวเช่น %a และ %s ตัวอักษรด้านบนเป็นตัวอักษร "ตรงข้าม" ของคลาส อินสแตนซ์%p เป็นตัวอักษรแทรกและ 1> %P

ตัวละครที่มีเสน่ห์

มี 12 "ตัวอักษรวิเศษ" ที่จำหน่ายสำหรับวัตถุประสงค์พิเศษในรูปแบบ:

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

คุณสามารถหลบหนีและค้นหาตัวละครเวทย์โดยใช้สัญลักษณ์ % ตัวอย่างเช่น, เพื่อค้นหา roblox.com ด้วยสัญลักษณ์ . (ระยะเวลา) โดยมี 1> %


-- “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) --> nil
local end1 = string.match("first second third", "third$") -- จับคู่เพราะ "ที่สาม" ปิด
print(end1) --> ที่สาม
local end2 = string.match("third second first", "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" อยู่ใน "ฉันเล่น Roblox"
print(match3) --> Roblox

คลาส มอดิฟายเตอร์

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


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

คุณสามารถใช้ ตัวปรับแต่ง กับคลาสตัวละครใด ๆ ผลการค้นหา:

ตัวชี้วัดหมายถึง
+จับคู่ 1 หรือมากกว่าของคลาสตัวละครก่อนหน้านี้
-:จับคู่กับตัวละครที่มีอยู่ก่อนหน้านี้ให้น้อยที่สุด
*ตรง 0 หรือมากกว่าของคลาสตัวละครก่อนหน้านี้
?จับคู่ 1 หรือน้อยกว่าคลาสตัวละครก่อนหน้านี้
%n ตรวจสอบสำหรับ n ระหว่าง 1 และ 9 ตรงกับสตริงขนาดเล็กที่เหมือนกับสตริงที่จับได้ 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) --> 2
local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")
print(match2) --> 25

ชุดคลาส

ใช้เมื่อเดียวคลาสตัวอักษรไม่สามารถทำงานทั้งหมดได้ อินสแตนซ์คุณอาจต้องการจับคู่ตัวอักษรทั้งสอง ( %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!!!

คำสั่ง (ตั้งค่า) แรกบอก Luau ให้ค้นหาตัวอักษรทั้งหมดที่เป็นตัวอักษรขนาดเล็กและจุลภาค ด้วย + ตั้งค่า( ello!!! ) หยุดเมื่อมันไปถ

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

Class, สามารถ "ตรงข้าม" ของตัวเองได้ นี่เป็นไปโดยการเพิ่มตัวอักษร ^ ตั้งค่า

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

การจับตัวอักษร

ตัวจับคู่ จับคู่ได้ภายในรูปแบบ เป็นรูปแบบในตัวอักษร () และใช้เพื่อรับ (จับภาพ) ตัวสตริงและบันทึกไปยังตัวแปร ตัวอย่


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 เป็นการเพิ่มปลอดภัยเพราะมันทำให้พื้นที่ทั้งสองด้านของสัญลักษณ์ = เป็

การจับคำสตริงยังสามารถเป็น ถูกซ้อน เช่นตัวอย่างต่อไปนี้:


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
--> ราชอาณาจักรแห่งเมฆเป็นสวรรค์
--> ราชอาณาจักรในเมฆ
--> ปราสาทป่าเป็นสงบ
--> Forest Kingdom

ลักษณะนี้ค้นหางานตามวิธีต่อไปนี้:

Library.สตริง.gmatch() ตัวผู้จัดการการจับคู่ทั้งหมดในรูปแบบ คำอธิบาย ที่กำหนดโดยคู่พ่อแม่ภายนอก กำลังติดตาม:

#รูปแบบจับกุม
1(The%s:%a+%sKingdom) [%w%s+]ราชอาณาจักรแห่งเมฆเป็นเกาะที่สวยงาม

จับภาพ"กรุงเก่า" ที่กำหนดโดยคู่พ่อแม่ภายใน รูปแบบนี้เรียงลำดับเพียงเรื่องเดียวกันเท่านั้น:

#รูปแบบจับกุม
2 เครื่อง(%a+%sKingdom) ได้ราชอาณาจักรในเมฆ

ตัวนำจานสามารถแสดงผลได้อย่างรวดเร็วและค้นหาตัวอักษรสามตัวที่ตรงกันในขณะที่ไม่มีการเปลี่ยนแปลงใด ๆ กำลังติดตาม:

#รูปแบบจับกุม
3(The%s:%a+%sKingdom) [%w%s+]ปราสาทป่าเป็นสงบ
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 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
--> คลาวด์ 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