문자, 숫자 및 기호와 같은 시퀀스의 데이터 형식은 문자열 데이터 형식입니다. 이것은 대부분의 텍스트 기반 정보를 저장하는 데 사용되는 데이터 형식입니다.
문자열 선언
문자열 변수를 선언하려면 따옴표를 문자열 주위에 둡니다. 더블 따옴표( " )를 사용하는 것이 더 일반적이지만, 단일 따옴표( ' )도 작동합니다. 문자열에 단일 또는 더블 따옴표를 포함하려면 다른 종류의 따옴표( )
local string1 = "Hello world!"print(string1) --> 안녕하세요, 세계!local string2 = 'Hello "world"!'print(string2) --> Hello "world"!
싱글 따옴표와 더블 따옴표를 문자열에 포함하거나 여러 줄 문자열을 만들려면 두 번째 따옴표를 사용하여 선언합니다.
local string1 = [[Helloworld!Hello "world"!Hello 'world'!]]print(string1)--> 안녕--> 세계!--> 안녕하세요 "세계"!--> Hello 'world'!
필요한 경우 문자열에 동일한 기호가 있는 시작 및 끝 부분에 여러 개의 브라켓을 중첩할 수 있습니다.If necessary, you can nest multiple brackets inside a string using the same number of equal signs in both the beginning and ending bracket:
local string1 = [=[Hello[[world!]]]=]print(string1)--> 안녕--> [[world!]]
문자열 결합
문자열을 결합하려면 문자열을 두 개의 따옴표( .. )로 연결하십시오. 문자열을 연결하면 공간을 삽입하지 않으므로 이전/다음 문자열 시작/끝에 공간을 포함하거나 두 문자열 사이에 공간을 포함하여야 합니다.
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() 명령은 여러 인수를 가져와 공간과 결합하므로 스페이스를 생성하기 위해 대신 , 대신 ,를 사용할 수 있습니다.
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) --> 안녕하세요 '월드'!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
비교
문자열에 있는 모든 문자열을 비교하려면 <, <=, > 및 1>
print("Apple" < "apple") --> 예print("Banana" < "apple") --> true (B는 ASCII의 뒤에 있습니다)print("number100" < "number20") --> true
문자열 패턴 참조
문자열 패턴은 Library.string.일치() 및 string.match()와 같은 문자를 사용하여 더 길은 문자열의 조각 또는 하위 문자열을 찾을 수 있는 조합입니다.
직접 매치
직접 일치는 Luau 함수에서 사용할 수 있습니다 string.match() , 마법 문자 외에는 Roblox 내에서 단어를 검색합니다. 예를 들어, 다음 명령은 문자열 내에서 Roblox 를 검색합니다.
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>, 5>따
다음 표에서는 Luau 문자 패턴의 공식 문자 클래스를 보여줍니다.
클래스 | 대표자를 나타냅니다. | 예시 매치를 나타냅니다. |
---|---|---|
. | 모든 캐릭터 | 32kasGJ1%fTlk?@94 |
%a | 대문자 또는 소문자 문자 | aBcDeFgHiJkLmNoPqRsTuVwXyZ |
%l | 대문자를 작게 쓰는 경우 | abcdefghijklmnopqrstuvwxyz |
%u | 상대 자를 위한 대문자 | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d | 모든 숫자(번호) | 0123456789 |
%p | 모든 구분 기호 문자 | !@#;,. |
%w | 문자 또는 숫자 | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 입니다. |
%s | 공간 또는 백스페이스 문자 | , \n, \r |
%c | 특수 콘트롤 캐릭터 | |
%x | 16진 문자 | 0123456789ABCDEF |
%z %z | NULL 문자 ( \0 ) |
단일 문자 클래스, 예를 들어 %a 및 %s 의 경우, 해당 상위 케이스 문자는 클래스의 "반대"를 나타냅니다. 예를 인스턴스, %p 는 중지점을 나타내는 문자를 나타내고 1> %P1> 는 모든 문자를 나
마법 문자
패턴에 있는 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") -- 처음에 "일치"가 있기 때문에 일치합니다.print(start1) --> 첫 번째local start2 = string.match("third second first", "^first") -- 시작 부분에 "첫 번째"가 없기 때문에 일치하지 않습니다.print(start2) --> 없음local end1 = string.match("first second third", "third$") -- 종료"세 번째"가 있기 때문에 일치합니다.print(end1) --> 세 번째local 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가 "나는 Roblox를 플레이"에 포함되어 있기 때문에 일치합니다.print(match3) --> Roblox
클래스 모디фика터
자체적으로 캐릭터 클래스는 문자열에 있는 문자 하나 만 일치합니다. 예를 인스턴스, 다음 패턴 ( "%d" )은 왼쪽에서 오른쪽으로 문자열을 읽기 시작하고, 첫 번째 자 숫자 ( 1> 21> )를 찾아 중지합니다.
local match = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match) --> 2
모든 캐릭터 클래스에서 모디фика터 를 사용하여 결과를 제어할 수 있습니다.
측정기 | 의미 |
---|---|
+ | 이전 문자 클래스 1개 이상과 일치 |
-: | 이전 문자 클래스 중 가능한 한 적합 |
*) | 이전 문자 클래스 0개 이상과 일치 |
? | 이전 문자 클래스 1개 이하와 일치 |
%n %1> | n 이 1 및 9 사이에 있는 경우, 캡처된 문자열과 일치하는 하위 문자열을 찾습니다. |
%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!!!
첫 번째 명령(set)은 Luau가 모든 대문자 문자와 띄어쓰기를 찾도록 하는 첫 번째 명령을 설정합니다. 전체 세트 후에 추가된 + 측정기를 통해 모든 대문자 문자(ello), 스페이스에 도달할 때 중지됩니다.
두 번째 명령(非設定)에서 + 수량 측정기는 앞에 있는 %p 클래스에만 적용되므로 Luau는 시리즈의 첫 번째 하위 문자( o )만 가져오기 전에 2>p2> 수량 측정기만 가져옵니다( 5>o5> ).
캐릭터 클래스와 마찬가지로 집합은 스스로의 반대가 될 수 있습니다. 이는 설정시작 부분에 ^ 문자를 추가하여 직접 열기 [ 후에 모든 캐릭터 을
또한 시작 및 끝 캐릭터 사이의 전체 범위를 찾을 수 있는 범위를 지원합니다. 이 기능은 Lua 5.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) --> 2000local 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) doprint(description)print(kingdom)end--> 클라우드 왕국은 천국입니다--> 클라우드 왕국--> 숲의 왕국은 평화로웠습니다--> Forest Kingdom
이 패턴 검색은 다음과 같이 작동합니다:
Library.문자열.gmatch() 이식은 부모 쌍의 정의한 전체 설명 패턴에 대해 일치를 찾습니다. 이 작업은 첫 번째 쉼표에서 중지되고 다음을 캡처합니다.
# | 패턴 | 점령 |
---|---|---|
1) | (왕국의 %s%) 이상 | Cloud Kingdom는 천국입니다 |
성공적인 첫 번째 캡처를 사용하여 이터이터는 다음과 같은 "왕국" 패턴을 정의한 내부 쌍의 패턴에서 일치를 검색합니다. 이 중첩 패턴은 팔로잉단순히 캡처합니다.
# | 패턴 | 점령 |
---|---|---|
2 | %a+%sKingdom) | 클라우드 왕국 |
다음을 검색하고 정규화된 문자열을 반환합니다.itteriter 백업 및 전체 문자열 검색을 계속합니다.itteriter
# | 패턴 | 점령 |
---|---|---|
3 | (왕국의 %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 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