Chuỗi

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Dữ liệu chuỗi dữ liệu là một chuỗi các ký tự, chẳng hạn như các chữ cái, số và dấu hiệu. Nó là kiểu dữ liệu để lưu trữ hầu hết các thông tin dữ liệu dựa trên văn bản.

Tuyên bố các biến

Để tuyên bố một biến đổi chuỗi, hãy đặt dấu chấm câu xung quanh các ký tự. Nó được phổ biến hơn để sử dụng dấu chấm câu nhân tạo ( " ) nhưng các dấu chấm câu đơn giản ( ' ) cũng được hỗ trợ. N


local string1 = "Hello world!"
print(string1) --> Xin chào thế giới!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Để bao gồm cả dấu chấm câu và dấu chấm hai trong một chuỗi, hoặc tạo các chuỗi nhiều dòng, tuyên bố chúng bằng các dấu chấm nhân tạo:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Xin chào
--> thế giới!
--> Xin chào "thế giới"!
--> Hello 'world'!

Nếu cần thiết, bạn có thể gấp nhiều dấu chéo vào một chuỗi bằng cách sử dụng số lượng bằng hữu tương tự ở cả hai dấu chéo bắt đầu và kết thúc:


local string1 = [=[Hello
[[world!]]
]=]
print(string1)
--> Xin chào
--> [[world!]]

Kết hợp dải

Để kết hợp các chuỗi, tập hợp chúng với hai dấu chấm ( .. ) . Tập hợp chuỗi không đặt một khoảng trống giữa chúng, vì vậy bạn sẽ cần phải bao gồm khoảng trống ở cuối/bắt đầu của một chuỗi trước đó/s


local hello = "Hello"
local helloWithSpace = "Hello "
local world = "world!"
local string1 = hello .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(string1) --> Thế giới hellow!
print(string2) --> Xin chào thế giới!
print(string3) --> Hello world!

Lưu ý rằng lệnh print() nhận nhiều lập luận và kết hợp chúng với nhau, vì vậy bạn có thể sử dụng , thay vì , để tạo ra các không gian trong 1> kết quả in1> .


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Thế giới hellow!
print(hello, world .. exclamationMark) --> Xin chào thế giới!
print(hello, world, exclamationMark) --> Hello world !

Chuyển đổi chuỗi

Để chuyển một chuỗi thành một số, hãy sử dụng chức năng tonumber(). Nếu chuỗi đó không có đại diện số, tonumber() trả lại nil .


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

Đang chạy trốn dòng

Để thoát một tuyên bố chuỗi dòng hoặc một tuyên bố chuỗi đơn dấu câu và gắn bất kỳ nhân vật nào, hãy đặt một dấu chấm câu ( \ ) trước tên nhân vật. Ví dụ:

  • Để tích hợp một câu nói đơn lẻ trong một chuỗi câu nói đơn lẻ, hãy sử dụng \' .
  • Để thúc đẩy một dấu chấm hỏi vào một chuỗi dấu chấm hỏi, hãy sử dụng \" .

local string1 = 'Hello \'world\'!'
print(string1) --> Xin chào 'thế giới'!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

Một số nhân vật theo dấu chấm câu sau khi quay lại sản xuất những nhân vật đặc biệt thay vì những nhân vật trốn thoát:

  • Để đặt một dòng mới, hãy sử dụng \n .
  • Để đặt một tab ngang, hãy sử dụng \t .

local string1 = "Hello\nworld!"
print(string1)
--> Xin chào
--> thế giới!
local string2 = "Hello\tworld!"
print(string2) --> Hello world!

Lập dịch chuỗi

Luau hỗ trợ biến chuyển dịch chuỗi , một tính năng cho phép bạn tạo ra các biểu tượng trong chuỗi. Sử dụng dấu chấm dứt ( ` ) để tuyên bố một biểu tượng chuyển dịch, sau đó thêm các biểu tượng vào trong những dấu chấm dứt:


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

Mặc dù biến là cách sử dụng phổ biến nhất, bạn vẫn có thể sử dụng bất kỳ biểu tượng nào, bao gồm toán học:


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) --> Xin chào thế giới, 1 lần!
print(string2) --> Xin chào thế giới, 2 lần!
print(string3) --> Hello world a third time!

Các quy tắc trốn thoát tiêu chuẩn áp dụng cho backticks, curly brackets và backslashes:


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

Chuyển đổi số

Nếu bạn thực hiện các hành động toán học trên một chuỗi, Luau tự động chuyển chuỗi thành một số. Nếu chuỗi đó không có đại diện số, nó sẽ thả một lỗi.


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

So sánh

Các dòng có thể được so sánh bằng các < , <= , > và <


print("Apple" < "apple") --> đúng
print("Banana" < "apple") --> true (B là trước một trong ASCII)
print("number100" < "number20") --> true

Tìm kiếm mẫu dòng chuỗi

Một mẫu chuỗi chữ cái là một kombinación của các ký tự bạn có thể sử dụng với string.match() , string.gmatch() và các chức năng khác để tìm một mảnh, hoặc substring, của một chuỗi dài hơn.

Trận đấu trực tiếp

Bạn có thể sử dụng trận đấu trực tiếp trong một chức năng Luau như string.match() , ngoại trừ những ký tự ma thuật . Ví dụ, các lệnh này tìm kiếm từ khóa Roblox trong một dòng chuỗi:


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

Lớp nhân vật

Các lớp nhân vật là cần thiết cho các truy vấn chuỗi cao cấp hơn. Bạn có thể sử dụng chúng để tìm kiếm điều gì đó không phải là nhân vật cụ thể nhưng phù hợp với một danh mục (lớp) xác định, bao gồm chữ cái, số

Bảng sau đây hiển thị các lớp nhân vật chính thức cho các mẫu dòng Luau:

LớpDiễn tả hóaVí dụ trận đấu
.Bất kỳ nhân vật nào32kasGJ1%fTlk?@94
%aMột chữ cái hoa hoặc chữ cái thườngaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lMột chữ viết thườngabcdefghijklmnopqrstuvwxyz
%uMột chữ viết hoaABCDEFGHIJKLMNOPQRSTUVWXYZ
%d>Bất kỳ số (number)0123456789
%pBất kỳ ký tự chấm câu!@#;.,.
%wMột nhân vật alfanumeric (hoặc chữ cái hoặc một số)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sMột kí tự trống hoặc trắng 0> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> 1>
%cMột nhân vật điều khiển đặc biệt control character
%x:Một nhân vật hexadecimal0123456789ABCDEF
%zNhân vật NULL ( \0 )

Đối với các lớp ký tự đơn như %a%s, chữ viết lớn tương ứng đại diện cho "ngược" của lớp. Ví ví dụ / trường hợp, %p đại diện cho một ký tự dấu câu và 1> %P1> đại diện cho

Nhân vật ma thuật

Có 12 "ký tự ma thuật" được dựa trên những mục đặc biệt trong mẫu:

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

Bạn có thể trốn thoát và tìm kiếm những nhân vật ma thuật bằng cách sử dụng biểu tượng %. Ví dụ, để tìm kiếm roblox.com , thoát khỏi biểu tượng . (khoảng cách) bằng cách đặt nó trước một biể


-- “roblox.com” khớp “roblox#com” vì thời gian được hiểu là “bất kỳ nhân vật nào”
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Thoát khỏi khoảng thời gian với % để nó được hiểu là một nhân vật khoảng thời gian thực
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Các khớp

Bạn có thể tìm kiếm một mẫu ở đầu hoặc cuối của một chuỗi bằng cách sử dụng các biểu tượng ^$ .


local start1 = string.match("first second third", "^first") -- Vẽ bởi vì "đầu tiên" ở đầu
print(start1) --> đầu tiên
local start2 = string.match("third second first", "^first") -- Không khớp vì "đầu tiên" không ở đầu
print(start2) --> nil
local end1 = string.match("first second third", "third$") -- Vẽ bởi vì "thứ ba" ở kết thúc
print(end1) --> thứ ba
local end2 = string.match("third second first", "third$") -- Không khớp vì "thứ ba" không ở kết thúc
print(end2) --> nil

Bạn cũng có thể sử dụng cả hai ^$ để đảm bảo một mẫu tương ứng chỉ với toàn bộ chuỗi và không chỉ với một phần nào đó của nó.


-- Sử dụng cả ^ và $ để trùng khớp trên một chuỗi hoàn chỉnh
local match1 = string.match("Roblox", "^Roblox$") -- Vẽ vì "Roblox" là toàn bộ chuỗi (độ giống nhau)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Không khớp vì "Roblox" không ở đầu VÀ kết thúc
print(match2) --> nil
local match3 = string.match("I play Roblox", "Roblox") -- Bịch match vì "Roblox" được đựng trong "Tôi chơi Roblox"
print(match3) --> Roblox

Mod chủng tộc

Bằng chính nó, một lớp nhân vật chỉ đồng bộ với một nhân vật duy nhất trong một chuỗi. Ví ví dụ / trường hợp, mẫu sau đây ( "%d") bắt đầu đọc từ bên trái đến bên phải, tìm thấy đầu tiên chuỗi ( 1> 21> ) và d


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

Bạn có thể sử dụng hệ số nhân với bất kỳ lớp nào để kiểm soát kết quả:

Kẻ đo量ý nghĩa
+Cộng 1 hoặc nhiều lớp nhân vật trước đó
-:Vẽ nhiều nhân vật nhỏ nhất có thể
*Cộng 0 hoặc nhiều nhân vật trước đó
?Gắn 1 hoặc ít hơn các lớp nhân vật trước đó
%n:Đối với n giữa 19, tương ứng với một substring bằng cách đuổi tương ứng với chuỗi đã được xác định.
%bxyHình ảnh cân bằng khớp nối x , y và mọi thứ giữa (chẳng hạn, %b() để một cặp dấu chấm câu và mọi thứ giữa chúng)

Thêm một biến đổi vào cùng một mẫu ( "%d+" thay vì "%d" ) để ra 25 thay vì 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

Bộ Class

Các cấu hình nên được sử dụng khi một lớp nhân vật duy nhất không thể thực hiện toàn bộ công việc. Ví ví dụ / trường hợp, bạn có thể muốn kết hợp cả các chữ cái thường ( %l ) và dấu chấm câu ( %p ) bằng một mẫ

Các hàm được định nghĩa bởi các dấu chỉ [] xung quanh chúng. Trong ví dụ sau đây, hãy nhận thấy sự khác biệt giữa việc sử dụng một hàm ( "[%l%p]+" ) và việc không sử dụng hàm ( "[%l%p+" ) .


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Bộ
print(match1) --> xin chào!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Không đặt
print(match2) --> o!!!

Lệnh đầu tiên (cài đặt) cho Luau tìm cả các ký tự thấp dấu và dấu chấm câu. Với + đoạn nhiên liệu được thêm sau toàn bộ cài đặt, nó tìm thấy tất cả các ký tự đó ( ello!!! ) khi nó đạt đến không gian.

Trong lệnh thứ hai (không đặt), + đếm được chỉ áp dụng cho lớp %p trước nó, vì vậy Luau chỉ lấy một ký tự thứ nhất ( o ) trước chuỗi các dấu chấm câu ( 1> !!!1> ) trước khi series các dấu

Giống như các lớp nhân vật, các hàm có thể là "đối thủ" của chính họ. Điều này được thực hiện bằng cách thêm một ^ nhân vật ở đầu của cài đặt, ngay sau k

Các bộ đặt cũng hỗ trợ phạm vi cho phép bạn tìm toàn bộ một loạt các trận đấu giữa một nhân vật xuất phát và kết thúc. Đây là một tính năng nâng cao được trình bày chi tiết hơn trong Manual Lua 5.1 .

Những kẻ bắt chước

String captures are sub-patterns within a pattern. These are enclosed in parentheses () and are used to get ( chiếm lấy) matching substrings and save them to variables. Ví dụ, mẫu sau đây contains two captures, (%a+) and 1> percentd+1>, which return two substrings on a successful tương thích.


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

Trong mẫu trước, ? đếm được điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh điều chỉnh

Captures dòng cũng có thể được lớp lại như sau ví dụ:


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
--> Vương quốc trên không là thiên đường
--> Vương quốc đám mây
--> Vương quốc Rừng là bình an
--> Forest Kingdom

Mẫu này tìm kiếm hoạt động như sau:

The string.gmatch() iterator looks for a match on the entire "miêu tả" pattern defined by the outer pair of parentheses. This stops at the first comma and captures the theo dõi:

#MẫuLấy
1(Cộng hòa%) [%w%s+]Vương quốc trên không là thiên đường

Sử dụng ngụ chiếm lấyđầu tiên thành công của nó, sau đó itér tìm kiếm một trận đấu trên mẫu "kingdom" định nghĩa bởi cặp phụ huynh bên trong. Mẫu này tổng hợp chỉ đơn giản là captures những gì theo dõi:

#MẫuLấy
2(%a+%sKingdom)Vương quốc đám mây

itterator sau đó thoát ra và tiếp tục tìm kiếm chuỗi đầy đủ, bắt capturing the theo dõi:

#MẫuLấy
3(Cộng hòa%) [%w%s+]Vương quốc Rừng là bình an
4(%a+%sKingdom)Vương quốc Rừng

Ngoài tất cả các trường hợp trên, có một trường hợp đặc biệt với một capturing empty ( () ). Nếu một capturing là trống, thì vị trí trong dòng sẽ được capturing:


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

Những kẻ bắt có thể được tổ chức lại như thông thường:


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
--> Đám mây 10
--> Forest 42

Giá trị trả lại lạ thường là số thay vì dòng chuỗi:


local match = "This is an example"
local pattern = "This is an ()example"
local position = string.match(match, pattern)
print(typeof(position)) --> number