2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

string.gsub

작성: sangseek | 게시 날짜: 2026/04/30 | 조회수: 48
[ 편집불가 ]

string.gsub는 문자열 내에서 특정 패턴이나 문자열을 찾아 다른 문자열로 바꾸는 전역 치환(global substitution) 기능을 의미합니다. 언어마다 구현과 세부 동작이 조금 다르므로 주요 두 구현(Lua와 Ruby)을 중심으로 정리합니다. 1) 공통 개념 - 목적: 원본 문자열에서 패턴(또는 문자열)에 매칭되는 모든 부분을 찾아 지정한 대체(replacement)로 바꿈. - 전역 치환: 이름에서 알 수 있듯 gsub는 보통 문자열 전체에서 모든 매칭을 바꿉니다. (대체 횟수를 제한할 수 있는 옵션을 제공하는 구현도 있음.) - 대체 값으로는 고정 문자열, 치환을 생성하는 함수(혹은 블록), 또는 매칭별 참조를 지원하는 방식이 가능함. 2) Ruby의 String gsub - 시그니처 예: new_str = str.gsub(pattern, replacement) 또는 str.gsub(pattern) { |match| ... } - pattern: 정규표현식(/.../) 또는 단순 문자열. - replacement: 고정 문자열이나 블록을 사용 가능. 고정 문자열 내에서 백참조(\1, \2, \k 등)를 사용해 캡쳐 그룹 참조 가능. - 블록 사용 시 블록은 매칭 문자열(또는 MatchData)에 대해 호출되어 반환값으로 대체 문자열을 결정. - 반환값: gsub은 원본을 변경하지 않고 변경된 새 문자열을 반환. gsub!은 제자리 변경을 하며, 변경이 일어나면 변경된 문자열을 반환하고 변경이 없으면 nil을 반환. - 예: - "a1b2".gsub(/\d/, " ") => "a b " - "abc123".gsub(/(\d+)/) { |m| m.to_i * 2 } => "abc246" - "file_01".gsub(/_(\d+)/, "_\\1.txt") => "file_01.txt" 3) Lua의 string.gsub - 시그니처 예: new_str, n = string.gsub(s, pattern, repl [, n]) 또는 s:gsub(pattern, repl [, n]) - pattern: Lua의 패턴(정규표현식보다 간단한 Lua 패턴)을 사용. 필요 시 패턴 문자들을 이스케이프해야 함. - repl: 문자열, 함수 또는 테이블을 지원. - 문자열 대체에서 캡쳐 참조는 %1, %2 ... 형태로 사용. - 함수 사용 시 함수는 캡쳐된 값들을 인수로 받아 반환값을 대체 문자열로 사용. - 테이블을 전달하면 매치된 문자열을 키로 하여 해당 값으로 대체. - 추가 인수 n: 최대 치환 횟수를 지정할 수 있음(옵션). - 반환값: 치환된 새 문자열과 실제로 치환된 횟수(숫자)를 반환. - 예: - string.gsub("a1b2", "%d", " ") => "a b ", 2 - string.gsub("name=John", "(%w+)=([%w_]+)", "%1:%2") => "name:John", 1 - string.gsub("apple banana", "(%w+)", function(w) return w:upper() end) => "APPLE BANANA", 2 4) 주의점 및 팁 - 패턴 문법 차이: Ruby는 정규표현식, Lua는 Lua 패턴(문법 차이 큼). 언어 문서를 참고해 메타문자 처리 방법을 확인해야 함. - 이스케이프: 대체 문자열 안의 특수 참조(\1 또는 %1 등)는 언어별 문법을 따름. 백슬래시 처리에 주의. - 성능: 매우 큰 문자열에 많은 치환을 반복하면 비용이 들 수 있음. 필요 시 제한(n)을 사용하거나 정규식 최적화를 고려. - 원본 변경 여부: Ruby의 gsub은 원본 복사, gsub!은 원본 변경. Lua는 항상 새 문자열 반환(원본 불변처럼 동작). 요약: string.gsub는 문자열에서 패턴(또는 문자열)에 매칭되는 모든 부분을 찾아 다른 값으로 바꾸는 전역 치환 함수/메서드이며, 구체적인 사용법(패턴 문법, 캡쳐 참조 방식, 반환값, 원본 변경 여부 등)은 사용하는 언어(Lua, Ruby 등)에 따라 다릅니다.
내용이 부정확하다면 싫어요를 누르세요.