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 = [[Helloworld!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 .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(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)) --> 123local 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 = 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) --> 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) --> 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
So sánh
Các dòng có thể được so sánh bằng các < , <= , > và <
print("Apple" < "apple") --> đúngprint("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) --> Robloxprint(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ớp | Diễn tả hóa | Ví dụ trận đấu |
---|---|---|
. | Bất kỳ nhân vật nào | 32kasGJ1%fTlk?@94 |
%a | Một chữ cái hoa hoặc chữ cái thường | aBcDeFgHiJkLmNoPqRsTuVwXyZ |
%l | Một chữ viết thường | abcdefghijklmnopqrstuvwxyz |
%u | Một chữ viết hoa | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d> | Bất kỳ số (number) | 0123456789 |
%p | Bất kỳ ký tự chấm câu | !@#;.,. |
%w | Một nhân vật alfanumeric (hoặc chữ cái hoặc một số) | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 |
%s | Mộ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> |
%c | Một nhân vật điều khiển đặc biệt control character | |
%x: | Một nhân vật hexadecimal | 0123456789ABCDEF |
%z | Nhân vật NULL ( \0 ) |
Đối với các lớp ký tự đơn như %a và %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ựclocal 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 ^ và $ .
local start1 = string.match("first second third", "^first") -- Vẽ bởi vì "đầu tiên" ở đầuprint(start1) --> đầu tiênlocal start2 = string.match("third second first", "^first") -- Không khớp vì "đầu tiên" không ở đầuprint(start2) --> nillocal end1 = string.match("first second third", "third$") -- Vẽ bởi vì "thứ ba" ở kết thúcprint(end1) --> thứ balocal end2 = string.match("third second first", "third$") -- Không khớp vì "thứ ba" không ở kết thúcprint(end2) --> nil
Bạn cũng có thể sử dụng cả hai ^ và $ để đả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ỉnhlocal match1 = string.match("Roblox", "^Roblox$") -- Vẽ vì "Roblox" là toàn bộ chuỗi (độ giống nhau)print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- Không khớp vì "Roblox" không ở đầu VÀ kết thúcprint(match2) --> nillocal 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 1 và 9, 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. |
%bxy | Hì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) --> 2local 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 đặtprint(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 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
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) doprint(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ẫu | Lấ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ẫu | Lấ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ẫu | Lấ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 42local 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) doprint(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