문자열

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

문자열 데이터 유형은 문자, 숫자 및 기호와 같은 시퀀스의 문자입니다.대부분의 텍스트 기반 정보를 저장하는 데이터 유형입니다.

문자열 선언

문자열 변수를 선언하려면 문자 주위에 따옴표를 넣으십시오.더블 쿼티 (") 를 사용하는 것이 더 일반적이지만, 싱글 쿼티 (') 도 작동합니다.문자열에 단일 또는 이중 따옴표를 포함하려면 다른 종류의 따옴표로 문자열을 감싼 또는 이스케이프된 따옴표를 사용하십시오.


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) --> 헬로월드!
print(string2) --> 안녕, 세상!
print(string3) --> Hello world!

명령은 여러 인수를 사용하고 공백으로 결합하여 공간을 생성하므로 출력의 공간을 생성하기 위해 대신 를 사용할 수 있습니다.


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> 헬로월드!
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"!

백슬래시 뒤에 나오는 특정 문자는 이스케이프된 문자가 아닌 특수 문자를 생성합니다:

  • 새 줄을 포함하려면 \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

비교

문자열은 ASCII 코드에 따라 문자열의 각 문자의 순서에 따라 비교하는 <, <=, >>= 연산자를 사용하여 비교할 수 있습니다.Strings can be compared using the , , and operators which compare using lexicographical order based on the ASCII codes of each character in a string.이로 인해 문자열의 숫자가 올바르게 비교되지 않아 예를 들어 "100""20" 보다 작을 것이고, 바이트 "0""1" 는 바이트 "2" 보다 ASCII 코드가 낮습니다.


print("Apple" < "apple") --> 참
print("Banana" < "apple") --> true (B는 ASCII에서 인 앞에 있음)
print("number100" < "number20") --> true

문자열 패턴 참조

A 문자열 패턴 은 긴 문자열의 조각이나 부분을 찾기 위해 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대/소문자 문자abcdefghijklmnopqrsztuvwxyz
%l소문자 문자 A lowercase letterabcdefghijklmnopqrstuvwxyz
%u대문자 문자ABCDEFGHIJKLMNOPQRSTUVWXYZ
%d모든 숫자(번호)0123456789
%p어떤 단락 기호 문자든!@#;,.
%w알파벳 숫자 문자(문자 또는 숫자 또는)abcdefghijklmnopqrsztuvwxyz0123456789
%s공백 또는 공백 문자 , \n , 그리고 \r
%c특수 제어 문자
%x16진수 문자0123456789abcdef
%zNULL 문자(\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") -- 처음에 "첫 번째"가 있기 때문에 일치
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$") -- 종료"세 번째"가 없어서 일치하지 않음
print(end2) --> nil

패턴이 전체 문자열만 일치하고 일부만 아닌지 확인하기 위해 ^$를 함께 사용할 수도 있습니다.


-- 전체 문자열에서 일치하도록 ^와 $를 모두 사용
local match1 = string.match("Roblox", "^Roblox$") -- 전체 문자열인 "Roblox"이기 때문에 일치(평등)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- 앞과 뒤에 "Roblox"가 없기 때문에 일치하지 종료
print(match2) --> 무효
local match3 = string.match("I play Roblox", "Roblox") -- Roblox가 "나는 Roblox를 플레이한다" 내에 포함되어 있기 때문에 일치합니다
print(match3) --> Roblox

클래스 修正자

자체적으로 캐릭터 클래스는 문자열에서 하나의 문자만 일치합니다.예를 인스턴스, 다음 패턴( "%d" )은 왼쪽에서 오른쪽으로 문자열을 읽기 시작하고, 첫 번째 숫자( 2 )를 찾아 중지합니다.


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

모든 문자 클래스로 모디파이어를 사용하여 결과를 제어할 수 있습니다:

정량화기의미
+이전 문자 클래스 1개 이상과 일치
-이전 문자 클래스의 가능한 한 적은 부분을 일치시키기
*이전 문자 클래스 0개 이상 일치
?이전 문자 클래스 1개 이하와 일치
%nFor n between 1 and 9, matches a substring equal to the nth captured 문자열.
%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

클래스 세트

세트 는 단일 문자 클래스가 전체 작업을 수행할 수 없을 때 사용해야 합니다.예를 인스턴스, 작은 문자( )와 마침표 기호( )를 모두 단일 패턴으로 일치시키고 싶을 수 있습니다.

집합은 괄호 [] 주위에 정의됩니다.다음 예제에서는 집합( )을 사용하고 집합( )을 사용하지 않는 차이를 알아보세요.


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에게 소문자 및 구두점을 모두 찾도록 지시합니다.전체 집합 이후에 추가된 양자 계산기로 인해 해당 문자의 전체 가 찾아지며, 공백에 도달하면 중지됩니다.

두 번째 명령(설정되지 않음)에서 + 계산기는 앞의 %p 클래스에만 적용되므로 Luau는 마침표 시리즈(!!!) 전에 첫 번째 소문자 문자(o)만 잡습니다.

캐릭터 클래스와 마찬가지로 세트는 자체의 "반대"일 수 있습니다.이는 설정시작에 ^ 문자를 추가하여 열기 [ 바로 후에 수행됩니다.예를 인스턴스, 는 구분 기호와 공백을 모두 나타내며, 는 구분 기호와 공백을 제외한 모든 문자를 나타냅니다.

세트는 또한 범위 를 지원하며, 시작 및 끝 문자 사이의 전체 범위의 일치 항목을 찾을 수 있습니다.이는 루아 5.1 매뉴얼에 자세히 설명된 고급 기능입니다.

문자열 캡처

문자열 패턴 내의 하위 패턴입니다.괄호로 묶여 있으며 일치하는 부분 문자열을 가져와 변수에 저장하는 데 사용됩니다. These are enclosed in parentheses () and are used to get (capture) matching substrings and save them to variables.예를 들어 다음 패턴에는 두 개의 캡처, (%a+)(%d+) , 성공적인 일치에 따라 두 개의 부분 문자열을 반환하는 것이 포함되어 있습니다.


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

이전 패턴에서 두 클래스 모두를 따르는 양자는 공백을 표지 양쪽에 선택적으로 만들기 때문에 안전한 추가입니다.즉, 평등 기호 주위에 하나 이상의 공백이 누락되면 일치가 성공합니다.

문자열 캡처도 다음 예와 같이 중첩될 수 있습니다 :


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

이 패턴 검색은 다음과 같이 작동합니다:

string.gmatch() 반복기는 부모 괄호의 외부 패턴으로 정의된 전체 "설명" 패턴에서 일치하는 항목을 찾습니다.이는 첫 번째 쉼표에서 중지되고 팔로잉캡처합니다:

#패턴캡처
1(The%s(%a+%sKingdom)[%w%s]+)클라우드 왕국은 천상입니다

성공적인 첫 번째 캡처를 사용하여 반복기는 부모 괄호의 내부 패턴으로 정의된 "왕국" 패턴에서 일치하는 항목을 찾습니다.이 중첩 패턴은 단순히 팔로잉캡처합니다:

#패턴캡처
2(%a+%s왕국)클라우드 왕국

그런 다음 반복기는 물러서서 전체 문자열을 계속 검색하여 팔로잉캡처합니다:

#패턴캡처
3(The%s(%a+%sKingdom)[%w%s]+)숲 왕국은 평화롭습니다
4(%a+%s왕국)숲 왕국

위의 모든 것 외에도, 비어있는 캡처 ( )가 있는 특별한 경우가 있습니다.캡처가 비어 있으면 문자열의 위치가 캡처됩니다:


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