English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Lua 문자열

문자열 또는 문자열(String)은 숫자, 문자, 언어선으로 구성된 문자열입니다.

Lua 언어에서 문자열은 다음 세 가지 방식으로 나타낼 수 있습니다:

  • 단따옴표 사이의 문자열.

  • 쌍따옴표 사이의 문자열.

  • [[]] 문자열.

위 세 가지 방법의 문자열 예제는 다음과 같습니다:

string1 = "Lua"
print("\"string" 1 는\"",string1)
string2 = 'oldtoolbag.com'
print("string" 2 는	"string"2)
string3 = [["Lua 가이드"]]
print("string" 3 는	"string"3)

위 코드 실행 결과는 다음과 같습니다:

"문자열" 1 은"	Lua"
문자열 2 은	oldtoolbag.com
문자열 3 은	"Lua 가이드"

escape 문자는 직접 표시할 수 없는 문자를 나타내기 위해 사용됩니다. 예를 들어, 백스페이스 키, 개행 키 등. 문자열 변환에서 양쪽 쌍따옴표를 사용할 수 있습니다. 예를 들어, "\"".

모든 escape 문자와 그 의미:

escape 문자
의미
ASCII 코드 값(10진수)
\a
소리(BEL)
007
\b
백스페이스(BS) ,현재 위치를 이전 열로 이동
008
\f
페이지 바꿈(FF),현재 위치를 다음 페이지의 시작으로 이동
012
\n
줄 바꿈(LF) ,현재 위치를 다음 행의 시작으로 이동
010
\r
개행(CR) ,현재 위치를 현재 행의 시작으로 이동
013
\t
수평 테이블(HT) (다음 탭 위치로 이동)
009
\v
수직 테이블(VT)
011
\\
빈 문자를 대표합니다
092
\'
빈 문자를 대표합니다
039
\"
빈 문자를 대표합니다
034
\0
빈 문자(NULL)
000
\ddd
1到38진수 숫자가 대표하는 어떤 문자든지
8진수 3자리
\xhh
1到216진수가 대표하는 어떤 문자든지
이진 16진수

문자열操作

Lua는 문자열操作을 지원하기 위해 많은 메서드를 제공합니다:

순번메서드 & 용도
1string.upper(argument):
문자열이 모두 대문자로 변환됩니다.
2string.lower(argument):
문자열이 모두 소문자로 변환됩니다.
3string.gsub(mainString,findString,replaceString,num)

문자열에서 대체

mainString이 처리할 문자열, findString이 대체될 문자, replaceString이 대체할 문자, num이 대체 횟수(미지정하면 모두 대체), 예를 들어:
> string.gsub("aaaa","a","z",3);
zzza    3
4string.find (str, substr, [init, [end]])
지정된 목표 문자열에서 지정된 내용을 검색합니다(세 번째 매개변수는 인덱스입니다), 그 위치를 반환합니다. 존재하지 않으면 nil을 반환합니다.
> string.find("Hello Lua user", "Lua", 1) 
7    9
5string.reverse(arg)
문자열 반전
> string.reverse("Lua")
auL
6string.format(...)
printf와 유사한 형식화 문자열을 반환
> string.format("the value is:%d",4)
the value is:4
7string.char(arg)과 string.byte(arg[,int])
char은 정수형 숫자를 문자로 변환하여 연결하고, byte는 문자를 정수 값으로 변환합니다(특정 문자를 지정할 수 있으며, 기본적으로 첫 번째 문자를 사용합니다).
> string.char(97,98,99,100)
abcd
> string.byte("ABCD",4)
68
> string.byte("ABCD")
65
>
8string.len(arg)
문자열 길이 계산
string.len("abc")
3
9string.rep(string, n)
반환된 문자열 string의 n개 복사본
> string.rep("abcd",2)
abcdabcd
10..
문자열을 연결합니다
> print("www.w3codebox.".."com")
ko.oldtoolbag.com
11string.gmatch(str, pattern)
이迭代 함수를 반환하며, 이 함수를 호출할 때마다 문자열 str에서 pattern 설명에 해당하는 다음 문자열을 반환합니다. 파라미터 pattern 설명의 문자열이 찾지 못되면, 이터레이션 함수는 nil을 반환합니다.
> for word in string.gmatch("Hello Lua user", "%a+) do print(word) end
Hello
Lua
user
12string.match(str, pattern, init)
string.match()는 원본 문자열 str에서 첫 번째 매칭을 찾습니다. 파라미터 init는 선택적이며, 검색 과정의 시작 위치를 지정합니다. 기본적으로1。
성공적으로 매칭되면, 함수는 매칭 표현식에 포함된 모든 캡처 결과를 반환합니다. 캡처 표시자가 설정되지 않았다면 전체 매칭 문자열을 반환합니다. 성공적인 매칭이 없으면 nil을 반환합니다.
> = string.match("I have 2 questions for you., "%d+ %a+")
2 questions
> = string.format("%d, %q", string.match("I have 2 questions for you., "(%d+) (%a+)"))
2, "questions"

문자열 추출

문자열 추출을 위해 sub() 메서드를 사용합니다.

string.sub()는 문자열을 추출하는 데 사용되며, 원형은 다음과 같습니다:

string.sub(s, i[, j])

파라미터 설명:

  • s: 추출할 문자열.

  • i: 추출 시작 위치.

  • j: 추출 종료 위치, 기본적으로 -1,마지막 문자.

-- 문자열
local sourcestr = "prefix--w3codeboxgoogletaobao--suffix"
print("\n원래 문자열", string.format("%q", sourcestr))
-- 추출된 부분,1개부터15개
local first_sub = string.sub(sourcestr, 4, 15)
print("\n처음 추출", string.format("%q", first_sub))
-- 문자열 접두사를 가져오는 방법,1개부터8개
local second_sub = string.sub(sourcestr, 1, 8)
print("\n제2회 잘라내기", string.format("%q", second_sub))
-- 마지막을 잘라내기10개
local third_sub = string.sub(sourcestr, -10)
print("\n제3회 잘라내기", string.format("%q", third_sub))
-- 인덱스 범위를 벗어났습니다. 원래 문자열 출력
local fourth_sub = string.sub(sourcestr, -100)
print("\n제4회 잘라내기", string.format("%q", fourth_sub))

위 코드의 실행 결과는 다음과 같습니다:

원래 문자열    "prefix--w3codeboxgoogletaobao--suffix"
제1회 잘라내기    "fix--w3codeboxg"
제2회 잘라내기    "prefix--"
제3회 잘라내기    "ao--suffix"
제4회 잘라내기    "prefix--w3codeboxgoogletaobao--suffix"

문자열 대소문자 변환

다음 예제는 문자열의 대소문자 변환을 보여줍니다:

string1 = "Lua";
print(string.upper(string1))
print(string.lower(string1))

위 코드의 실행 결과는 다음과 같습니다:

LUA
lua

문자열 검색 및 반전

다음 예제는 문자열을 검색하고 반전하는 방법을 보여줍니다:

string = "Lua Tutorial"
-- 문자열 검색
print(string.find(string, "Tutorial"))
reversedString = string.reverse(string)
print("새 문자열은", reversedString)

위 코드의 실행 결과는 다음과 같습니다:

5    12
새 문자열은 lairotuT auL입니다

문자열 포맷화

Lua는 string.format() 함수를 통해 특정 형식의 문자열을 생성할 수 있으며, 함수의 첫 번째 매개변수는 형식이며, 이후 매개변수는 형식에 포함된 각 코드에 해당하는 데이터입니다.

형식 문자열이 있기 때문에 생성된 긴 문자열의 읽기 편의성이 크게 향상되었습니다. 이 함수의 포맷은 C 언어의 printf()와 비슷합니다.

다음 예제는 문자열을 포맷하는 방법을 보여줍니다:

형식 문자열은 다음과 같은 이스케이프 코드를 포함할 수 있습니다:

  • %c - 숫자를 받아 ASCII 코드 테이블에 해당하는 문자로 변환합니다

  • %d, %i - 숫자를 받아 부호가 있는 정수 형식으로 변환합니다

  • %o - 숫자를 받아 8진수 형식으로 변환합니다

  • %u - 숫자를 무符号 정수 형식으로 변환합니다

  • %x - 숫자를 소문자를 사용한 16진수 형식으로 변환합니다

  • %X - 숫자를 대문자를 사용한 16진수 형식으로 변환합니다

  • %e - 숫자를 소문자 e를 사용한 과학적 기호 형식으로 변환합니다

  • %E - 숫자를 대문자 E를 사용한 과학적 기호 형식으로 변환합니다

  • %f - 숫자를 부호가 없는 정수 형식으로 변환합니다

  • %g(%G) - %e(%E, %G) 및 %f 중 짧은 형식으로 변환합니다

  • 문자열을 받아 Lua 컴파일러가 안전하게 읽을 수 있는 형식으로 변환합니다 - %q

  • 문자열을 받아서 지정된 매개변수에 따라 형식화합니다 - %s

기본 설정보다 세세하게 설정하려면 % 뒤에 매개변수를 추가할 수 있습니다. 매개변수는 다음 순서로 입력됩니다:

  • (1) 기호: 하나의+) 기호: 하나의

  • (2)占位符: 0, 문자열 너비를 지정한 경우에 사용됩니다. 빈 경우 기본 대체 문자는 공백입니다.

  • (3) 정렬 기호: 문자열 너비를 지정한 경우 기본적으로 오른쪽 정렬로 설정됩니다. 추가-) 번호를 왼쪽 정렬로 변경할 수 있습니다.

  • (4) 너비 값

  • (5) 소수점 자릿수/문자열 잘라내기: 너비 값 뒤에 소수점 부분 n을 추가하여, f(浮点数转义符, 예: %6.3f)는 소수점을 n자리로 유지합니다. s(문자열 escape 문자, 예: %5.3s)는 문자열을 앞n자리만 표시합니다.

string1 = "Lua"
string2 = "Tutorial"
number1 = 10
number2 = 20
-- 기본 문자열 형식화
print(string.format("기본 형식화 %s %s",string1,string2))
-- 날짜 형식화
date = 2; month = 1; year = 2014
print(string.format("날짜 형식화 %02d/%02d/%03d", date, month, year))
-- 십진수 형식화
print(string.format("%.4f",1/3))

위 코드의 실행 결과는 다음과 같습니다:

기본 형식화 Lua 튜토리얼
날짜 형식화 02/01/2014
0.3333

다른 예제:

string.format("%c", 83)                 -- 출력S
string.format("%",+d", 17.0)              -- 출력+17
string.format("%05d", 17)               -- 출력00017
string.format("%o", 17)                 -- 출력21
string.format("眻, 3.14)               -- 출력3
string.format("%x", 13)                 -- 출력d
string.format("%X", 13)                 -- 출력D
string.format("%e", 1000)               -- 출력1.000000e+03
string.format("%E", 1000)               -- 출력1.000000E+03
string.format("%",6.3f", 13)              -- 출력13.000
string.format("%q", "One\nTwo")         -- 출력"One\
                                        --   Two"
string.format("%s", "monkey")           -- 출력monkey
string.format("%",10s", "monkey")         -- 출력    monkey
string.format("%",5.3s", "monkey")        -- 출력  mon

문자와 정수 간의相互 변환

다음 예제는 문자와 정수 간의相互 변환을 설명합니다:

-- 문자 변환
-- 첫 번째 문자를 변환
print(string.byte("Lua"))
-- 세 번째 문자를 변환
print(string.byte("Lua",3))
-- 끝에서 첫 번째 문자를 변환
print(string.byte("Lua",-1))
-- 두 번째 문자
print(string.byte("Lua",2))
-- 끝에서 두 번째 문자를 변환
print(string.byte("Lua",-2))
-- 인트egers ASCII 코드를 문자로 변환
print(string.char(97))

위 코드의 실행 결과는 다음과 같습니다:

76
97
97
117
117
a

기타 일반 함수

다음 예제는 다른 문자열 연산을 설명합니다. 예를 들어, 문자열 길이 계산, 문자열 연결, 문자열 복사 등:

string1 = "www."
string2 = "w3codebox"
string3 = ".com"
-- 사용 .. 문자열 연결
print("연결된 문자열",string1..string2..string3)
-- 문자열 길이
print("문자열 길이 ",string.len(string2))
-- 문자열 복사 2 번
repeatedString = string.rep(string2,2)
print(repeatedString)

위 코드의 실행 결과는 다음과 같습니다:

문자열 연결    ko.oldtoolbag.com
문자열 길이     5
w3codeboxw3codebox

매칭 패턴

Lua에서의 매칭 패턴은 일반 문자열로 직접 설명됩니다. 이는 패턴 매칭 함수 string.find, string.gmatch, string.gsub, string.match

패턴 문자열에서도 문자 클래스를 사용할 수 있습니다.

문자 클래스는 특정 문자 집합 내의 어떤 문자도 일치시키는 패턴 항목을 의미합니다. 예를 들어, 문자 클래스 %d 소수자를 일치시키는 패턴 문자열을 사용할 수 있습니다. 따라서 패턴 문자열 %d%d/%d%d/%d%d%d%d 검색 dd/mm/yyyy 형식의 날짜:

s = "Deadline is 30/05/1999, firm"
date = "%d%d/%d%d/%d%d%d%d"
print(string.sub(s, string.find(s, date)))    --> 30/05/1999

下面的表列出了Lua支持的所有字符類:

單個字符(除 ^$()%.[]*+-? 外): 與該字符自身配對

  • (點): 與任何字符配對

  • %a: 與任何字母配對

  • %c: 與任何控制符配對(例如\n)

  • %d: 與任何數字配對

  • %l: 與任何小寫字母配對

  • %p: 與任何標點(punctuation)配對

  • %s: 與空白字符配對

  • 蓄何大寫字母配對

  • %w: 與任何字母配對/數字配對

  • %x: 與任何十六進制數配對

  • %z: 與任何代表0的字符配對

  • %x(此處x是非字母非數字字符): 與字符x配對. 主要用於處理表達式中具有功能的字符(^$()%.[]*+-?)的配對問題, 例如%%與%配對

  • [數個字符類]: 與任何[]中包含的字符類配對. 例如[%w_]與任何字母/數字, 或下劃線符號(_)配對

  • [^數個字符類]: 與任何不包含在[]中的字符類配對. 例如[^%s]與任何非空白字符配對

當上述的字符類用大寫書寫時, 表示與非此字符類的任何字符配對. 例如, %S表示與任何非空白字符配對.例如,'%A'非字母的字符:

> print(string.gsub("hello, up-down!","%A","."))
hello..up.down.    4

數字4不是字符串結果的一部分,他是gsub返回的第二个結果,代表發生替換的次數。

在模式匹配中有一些特殊字符,他們有特殊的意思,Lua中的特殊字符如下:

( ) . % + - * ? [ ^ $

'%' 用作特殊字符的轉義字符,因此 '%.' 匹配點;'%%' 匹配字符 '%'。轉義字符 '%' 不仅可以用来轉義特殊字符,還可以用于所有的非字母的字符。

模式條目可以是:

  • 單個字符類匹配該類別中任意單個字符;

  • 單個字符類跟一個 '*, 將匹配零或更多個該類的字符。 此項目總是匹配盡可能長的串;

  • 單個字符類跟一個 '+, 將匹配一或更多個該類的字符。 此項目總是匹配盡可能長的串;

  • 單個字符類跟一個 '-, 將匹配零或更多個該類的字符。 和 '*不僅有 ' 此項目總是匹配盡可能短的串;

  • 單個字符類跟一個 '?', 將匹配零或一個該類的字符。 只要有可能,它會匹配一個;

  • %n, xy n 可以從 1 到 9; 此項目匹配一個等於 n 捕獲物(後面有描述)的子串。

  • %b%b, xy xy 이 여기서 두 명확한 문자로 x 이 항목은 y 에서 시작하는 에서 끝나는 xy 그리고 그 안에 균형을 유지하며 의 문자열을 읽으면서 의 의미는, 이 문자열을 왼쪽에서 오른쪽으로 읽으면서,x 그래서 +1y 그래서 -1, 최종 종료 위치의 y 는 0에 도달하는 첫 번째 y。 예를 들어, 항목 %b()는 괄호가 균형을 맞춘 표현식을 매칭할 수 있습니다.

  • %f[set], 의미는 경계 패턴; 위치에 위치한 set 내부의 어떤 문자보다 앞에 있는 공백 문자열 그 위치의 전개자가 set 。 집합 set 의미는 이전에 설명한 것과 같습니다. 매칭된 공백 문자열의 시작과 끝 포인트는 해당 위치에 문자가 있다고 가정합니다. '\0'와 같습니다.

패턴:

패턴 하나의 패턴 항목의 시퀀스를 의미합니다. 패턴의 시작 부분에 '^' 기호를 추가하면 문자열의 시작 부분에서 매칭을 고정합니다. 패턴의 마지막 부분에 '$' 기호를 추가하면 매칭 과정이 문자열의 끝에 고정됩니다. '^'와 '$'가 다른 위치에 나타나면, 그들은 특별한 의미가 없으며 단순히 자신을 나타냅니다.

포획

패턴은 내부에 소괄호로 서브 패턴을 감싸면 됩니다; 이러한 서브 패턴은 포획물。 매칭 성공 시, 포획물 매칭된 문자열의 서브스트링은 미래의 용도로 저장됩니다. 포획물은 왼쪽 괄호의 순서로 번호를 매깁니다. 예를 들어, 패턴 "(a*(.)%w(%s*))"에 매칭됩니다 문자열에서 "a*(.)%w(%s*)"의 해당 부분은 첫 번째 포획물에 저장됩니다 (따라서는 번호 1 ); "."에 의해 매칭된 문자는 2 호 포획물로 "%s*"의 해당 부분은 3 호.

특례로, 비어 있는 포획()은 현재 문자열의 위치를 포획합니다(그것은 숫자입니다). 예를 들어, 패턴 "()aa()"를 문자열"flaaap"에 적용하면 두 개의 포획물이 생성됩니다: 3 와 5 。