루아에서 정규 표현식은 어떻게 사용하나요?
_____루아는 기본적으로 완전한 정규 표현식 엔진을 내장하고 있지 않지만, 패턴 매칭 기능을 제공합니다. `string` 라이브러리의 함수들(예: `string.match`, `string.find`, `string.gmatch`, `string.gsub`)을 사용하여 제한된 형태의 패턴 매칭이 가능합니다.
---
Q2: 루아의 패턴 매칭과 일반 정규 표현식의 차이점은 무엇인가요?
루아의 패턴 매칭은 간단하고 직관적인 형식으로 설계됐으며 Perl, PCRE 등에서 사용하는 복잡한 정규 표현식 문법의 일부만 지원합니다. 예를 들어, 루아에서는 `.`(임의 문자), `%d`(숫자), `%a`(알파벳), `*`(0회 이상 반복) 등 일부 문자를 사용합니다. 하지만 lookahead, lookbehind, 비캡처 그룹 등 고급 기능은 지원하지 않습니다.
---
Q3: 자주 사용하는 루아 패턴 예제는 무엇인가요?
- 숫자 찾기: `string.match("abc123", "%d+")` → "123"
- 알파벳 대문자 찾기: `string.match("Hello", "%u")` → "H"
- 단어 찾기: `string.gmatch("hello world", "%a+")` 반복하면서 각 단어를 얻음
- 문자열 치환: `string.gsub("hello world", "world", "Lua")` → "hello Lua"
---
Q4: 루아에서 정규 표현식과 유사한 기능을 확장하려면 어떻게 해야 하나요?
복잡한 정규 표현식이 필요하다면 별도의 라이브러리를 사용할 수 있습니다. 대표적으로 `Lrexlib`(PCRE, POSIX 정규식 지원), `LPeg`(Parsing Expression Grammar 기반) 등이 있습니다. 이들 라이브러리는 루아에서 강력한 정규 표현식 기능을 제공합니다.
---
Q5: 문자열에서 패턴 매칭 수행 시 자주 쓰는 함수는 무엇인가요?
- `string.match(s, pattern [, init])`: 첫 매칭 결과를 반환
- `string.find(s, pattern [, init [, plain]])`: 첫 매칭 위치를 반환
- `string.gmatch(s, pattern)`: 매칭되는 모든 부분을 반복자(iterator)로 반환
- `string.gsub(s, pattern, repl [, n])`: 패턴을 찾아 repl로 치환, 치환 횟수 반환
---
Q6: 루아 패턴에서 특별 문자는 어떻게 사용할 수 있나요?
루아 패턴에서 특별한 의미를 가진 문자는 `%`로 이스케이프합니다. 예를 들어, 문자 `.`를 문자 그대로 찾을 때는 `"%. "`라고 작성해야 합니다.
---
Q7: 루아 패턴 문자의 예시는 어떤 것들이 있나요?
- `%a`: 알파벳 문자
- `%d`: 숫자
- `%s`: 공백 문자
- `%w`: 단어 문자 (알파벳+숫자+_)
- `%u`: 대문자 알파벳
- `%l`: 소문자 알파벳
- `.`: 임의의 문자 하나 (줄바꿈 제외)
- `*`: 0회 이상 반복
- `+`: 1회 이상 반복
- `-`: 0회 이상 반복 (비탐욕적)
- `?`: 0회 또는 1회
---
Q8: 루아 패턴 예시 - 이메일 주소를 찾는 간단한 패턴은?
```lua
local email = "[email protected]"
local pattern = "%w+@%w+%.%a+"
local match = string.match(email, pattern)
print(match) -- [email protected]
```
---
요약
- 루아 기본 `string` 라이브러리는 제한된 패턴 매칭 기능 제공
- 복잡한 정규식은 외부 라이브러리(예: Lrexlib, LPeg) 사용 권장
- `%`로 특수 문자 이스케이프
- 자주 쓰는 함수: `match`, `find`, `gmatch`, `gsub`
- 간단한 패턴 매칭과 치환에 적합
작성자:
최하율 [비회원]
| 작성일자: 1년 전
2024-12-05 19:51:37
조회수: 174 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 174 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.