* 레퍼런스 메뉴얼을 참조했음을 밝힙니다.
- 루아는 주변 지원 라이브러리가 타 스크립트에 비해 부족한 것이 사실이지만, 기본적인 기능지원은 거의 하고 있는 편이어서 스크립트 엔진 자체의 활용도는 나름대로 굳혔다고 생각됩니다. 이 문자열 라이브러리도 기본 루아 배포본에 포함되어있으며 5.0이 되면서 테이블처리를 해서 약간은 객체지향적으로 쓸 수 있게 배려한 것 같습니다.
- 혹시나 루아를 모르시는 분을 위한 한마디 : 루아는 값을 여러개 return할 수 있습니다. (예를 들면, a, b, c = func(d) 이런 것이 가능합니다.)
Contents
- 1 소개
- 2 string.byte (s, [, i])
- 3 string.char (i1, i2, ...)
- 4 string.find (s, pattern [, init [, plain]])
- 5 string.len (s)
- 6 string.lower(s)
- 7 string.rep (s, n)
- 8 string.sub (s, i [, j])
- 9 string.upper(s)
- 10 string.format(formatstring, e1, e2, ...)
- 11 string.gfind (s, pat)
- 12 string.gsub (s, pat, repl [, n])
1 소개 #
이 라이브러리는 문자열관리를 위한 검색, 부분 문자열의 추출, 패턴 대입등등을 지원하는 일반 함수들을 제공한다. 루아에서의 문자열내에서 글자에 대한 인덱싱은 1부터 시작한다. (C언어와 같이 0이 아니다. 헛갈리지 말 것.) 음수 인덱싱도 허용하는데, 이때에는 문자열의 맨 끝에서부터 역으로 인덱싱을 하게 된다.(예를 들면, -1은 문자열의 맨 마지막 문자를 나타낸다.) 문자열 라이브러리의 모든 함수는 테이블 string내에 모두 담겨있다.
2 string.byte (s, [, i]) #
문자열 s의 i번째 문자의 내부 숫자로 표현된(예를 들면, 아스키 코드) 코드를 반환한다. 만일 i를 지정하지 않으면 1로 간주된다. i는 물론 음수로 지정될 수 있다.
주의 : 만일 이식성을 고려한다면 내부 코드를 사용하는 것은 바람직하지 않다. 이 코드는 플렛폼 의존적이다.
3 string.char (i1, i2, ...) #
0 이상의 정수만을 인자로 받는다. 각각의 숫자가 나타내는 코드에 해당되는 문자를 반환한다.
주의 : 만일 이식성을 고려한다면 내부 코드를 사용하는 것은 바람직하지 않다. 이 코드는 플렛폼 의존적이다.
4 string.find (s, pattern [, init [, plain]]) #
문자열 s내에서 pattern에 가장 첫번째로 맞는 부분을 찾아 반환한다. 만약 한개를 찾았다면 find()함수는 일치점의 시작과 끝을 나타내는 s의 인덱스들를 반환한다. 찾지 못하면 nil을 반환한다. 만약 pattern 문자열내에 "캡쳐"옵션이 지정되어 있다면(string.gsub 참조), 캡쳐된 문자열들도 반환값에 포함되어 반환된다. init 인자는 어디서부터 검색을 시작할 것인지에 대한 s 문자열내의 인덱스를 지정한다. 지정하지 않으면 1로 간주되며, 음수지정도 가능하다. plain 인자의 값을 true로 놓으면 패턴 매칭 기능을 끄는 효과가 있다. 이것은 아주 평범한(plain) 부분 문자열을 검색하는 명령이 되며, pattern 인자내에 들어있는 값들은 무시된다. 만일 plain 인자를 true로 지정하면 init도 반드시 지정해야 한다는 점에 주의해라. plain은 지정하지 않으면 당연히 false로 간주된다.
5 string.len (s) #
문자열의 길이를 반환한다. ""(빈 문자열)은 0을 반환한다. 첨부된 0값도 갯수에 포함된다. 그러므로 예를 들면 "a\000b\000c"의 길이는 5가 된다.
6 string.lower(s) #
주어진 문자열을 모두 소문자로 바꾸고 그 결과 문자열의 복사본을 반환한다. (원본은 바뀌지 않는다.) 대소문자에 대한 구분은 현재 로케일 설정을 따른다.
8 string.sub (s, i [, j]) #
문자열 s내에서 i에서 시작하고 j에서 끝나는 부분에 대한 부분 문자열을 반환한다. i와 j는 음수 지정이 가능하다. j를 지정하지 않으면, -1로 간주된다. (즉, i에서 끝까지의 영역을 나타내게 된다.) 여러가지 지정을 예를 들면, 만일 문자열 s의 길이 j 만큼의 접두어를 때어내려면, string.sub(s, 1, j)라고 지정하면 되며, string.sub(s, -i)는 문자열 s에서 i길이 만큼의 접미어를 때내는 효과가 있다.
10 string.format(formatstring, e1, e2, ...) #
첫번째 인자(반드시 문자열이어야 함)로 주어지는 정의를 따라서 다양한 수의 인자들을 잘 포맷한 결과물을 반환한다. C 언어에서 printf() 함수를 생각하면 된다. 내부 포맷룰도 같지만, 다음과 같은 차이가 있다.
- *, l, L, n, p, h는 지원되지 않는다.
- q 옵션이 제공된다. the q option formats a string in a form suitable to be safety read back by the Lua interpreter : The string is written between double quotes, and all double quotes, returns, and backslashs in the string are correctly escaped when written. For instance, the call
string.format('%q', 'a string with "quotes" and \n new line')will produce the string:"a string with \"quotes\" and \ newline"
- c, d, E, e, f, g, G, i, o, u, X, x와 같은 모든 옵션은 숫자를 적용하여 사용하며, q와 s만 문자열을 적용하여 사용된다. the * modifier can be simulated by building th appropriate format string. For example, "%*g" can be simulated with "%"..width.."g".









![[http]](/wiki/imgs/http.png)
