Apidog

올인원 협업 API 개발 플랫폼

API 설계

API 문서

API 디버깅

API 모킹

API 자동화 테스트

루비 정규 표현식: 명확하게 설명하다

Young-jae

Young-jae

Updated on March 28, 2025

정규 표현식(종종 regex 또는 regexp로 약칭)은 루비에서 텍스트 패턴 작업을 위한 강력한 도구입니다. 이 도구를 사용하면 특정 패턴을 기반으로 문자열을 검색하고, 일치시키고, 추출하고, 조작할 수 있습니다. 사용자 입력을 검증하거나, 데이터를 파싱하거나, 복잡한 텍스트 처리를 수행하든, 루비 정규 표현식은 간결하고 유연한 솔루션을 제공합니다.

이 튜토리얼은 기본 구문부터 고급 기술까지 루비의 정규 표현식의 기초를 안내합니다.


API 테스트 워크플로를 간소화하려는 루비 개발자는 Postman보다 여러 주요 측면에서 더 뛰어난 Apidog를 고려해야 합니다.

Apidog는 API 문서화, 디버깅, 자동화된 테스트 및 모킹을 하나의 통합 플랫폼에서 제공함으로써 Postman의 단편적인 접근 방식보다 더 통합된 경험을 제공합니다.

직관적인 인터페이스, 내장된 스키마 검증 및 포괄적인 팀 협업 기능을 갖춘 Apidog는 복잡한 API 프로젝트 관리가 훨씬 더 쉬워집니다.

루비 개발자는 Apidog의 명령줄 인터페이스를 통한 자동화의 강력한 지원, 버전 관리를 위한 원활한 Git 통합, 및 정확한 문서를 유지하는 데 필수적인 우수한 OpenAPI/Swagger 호환성을 높이 평가할 것입니다—루비 응용 프로그램과 함께 사용할 수 있습니다.

Rails로 RESTful 서비스를 구축하든 Sinatra로 마이크로서비스를 생성하든, Apidog의 올인원 툴킷은 Postman 사용자에게 발생하는 컨텍스트 전환을 없애주며, 가장 중요한 것인 훌륭한 루비 코드를 작성하는 데 집중할 수 있게 해줍니다.

버튼

루비 정규 표현식 만들기

루비에서 정규 표현식을 만드는 방법은 여러 가지가 있습니다:

방법 1: 루비 정규 표현식에서 슬래시 사용

루비에서 정규 표현식을 만드는 가장 일반적인 방법은 패턴을 슬래시(/)로 감싸는 것입니다:

/루비/  # "루비"와 일치하는 정규 표현식 생성

방법 2: 루비 정규 표현식에서 퍼센트 표기법 사용

퍼센트 표기법을 %r 표시자와 함께 사용할 수도 있습니다:

%r(루비)  # /루비/와 동일합니다.

패턴에 많은 슬래시가 포함된 경우 불필요한 이스케이프를 피하는 데 특히 유용합니다.

방법 3: 루비 정규 표현식에서 Regexp 클래스 사용

또 다른 방법은 Regexp.new 생성자를 사용하는 것입니다:

Regexp.new("루비")  # /루비/와 동일합니다.

이 모든 방법은 Regexp 클래스의 인스턴스를 생성합니다.

기본 루비 정규 표현식 기호

루비 정규 표현식은 다양한 패턴을 나타내기 위해 특수 기호를 사용합니다. 다음은 기본적인 기호입니다:

기호 설명 예제 일치하는 것
. 임의의 단일 문자와 일치 /a.b/ "axb", "a2b", "a b"
* 이전 요소의 0회 이상 일치 /ab*c/ "ac", "abc", "abbc"
+ 이전 요소의 1회 이상 일치 /ab+c/ "abc", "abbc", "abbbc"
? 이전 요소의 0회 또는 1회 일치 /ab?c/ "ac", "abc"
\| 대체 (OR) /고양이\|개/ "고양이", "개"
[] 문자 클래스 - 나열된 문자 중 하나와 일치 /[aeiou]/ "a", "e", "i", "o", "u"
() 캡처 그룹 생성 /(abc)+/ "abc", "abcabc"
^ 문자열의 시작과 일치 /^start/ "문자열의 시작"
$ 문자열의 끝과 일치 /end$/ "끝"
\\\\ 특수 문자 이스케이프 /\\\\\\\\/ "\"

루비 정규 표현식의 특수 문자

루비 정규 표현식은 패턴 매칭을 더 쉽게 해주는 미리 정의된 문자 클래스를 포함합니다:

기호 설명 예제 일치하는 것
\\\\d 임의의 숫자(0-9)와 일치 /\\\\d+/ "123", "9"
\\\\D 숫자가 아닌 문자와 일치 /\\\\D+/ "abc", "!@#"
\\\\w 임의의 단어 문자를 일치(알파벳 + 언더바 포함) /\\\\w+/ "루비123", "사용자_이름"
\\\\W 단어가 아닌 문자와 일치 /\\\\W+/ "!@#", " "
\\\\s 임의의 공백 문자와 일치 /\\\\s+/ " ", "\t", "\n"
\\\\S 임의의 비공백 문자와 일치 /\\\\S+/ "안녕하세요", "123"
\\\\A 문자열의 시작과 일치 /\\\\A안녕하세요/ "안녕하세요 세상"
\\\\z 문자열의 끝과 일치 /세상\\\\z/ "안녕하세요 세상"
\\\\Z 문자열의 끝 또는 마지막 줄 전과 일치 /세상\\\\Z/ "안녕하세요 세상\n"

루비 정규 표현식의 수량사

수량사는 패턴이 몇 번 일치해야 하는지를 지정할 수 있게 해줍니다:

수량사 설명 예제 일치하는 것
* 0회 이상의 반복 /ab*c/ "ac", "abc", "abbc"
+ 1회 이상의 반복 /ab+c/ "abc", "abbc"
? 0회 또는 1회 반복 /colou?r/ "color", "colour"
{n} 정확히 n회 반복 /a{3}/ "aaa"
{n,} 최소 n회 반복 /a{2,}/ "aa", "aaa", "aaaa"
{n,m} n회에서 m회 반복 사이 /a{2,4}/ "aa", "aaa", "aaaa"

예를 들어 "123-456-7890" 형식의 전화번호와 일치시키려면 다음과 같이 사용할 수 있습니다:

/\\\\d{3}-\\\\d{3}-\\\\d{4}/

루비 정규 표현식으로 패턴 매칭하기

루비 정규 표현식에서 매치 연산자 사용

패턴이 문자열과 일치하는지 확인하는 가장 기본적인 방법은 =~ 연산자를 사용하는 것입니다:

text = "빠른 갈색 여우"
if /quick/ =~ text
  puts "인덱스 #{$~.begin(0)}에서 일치 발견"
else
  puts "일치하는 것 없음"
end

=~ 연산자는 첫 번째 일치의 인덱스를 반환하거나, 일치하는 것이 없는 경우 nil을 반환합니다. 성공적인 일치 후, Regexp.last_match 또는 전역 변수 $~를 사용하여 일치에 대한 정보를 액세스할 수 있습니다.

루비 정규 표현식의 캡처 그룹

괄호를 사용하여 캡처 그룹을 만들고 일치의 특정 부분을 추출할 수 있습니다:

text = "이름: 존, 나이: 30"
if match_data = /이름: (\\\\w+), 나이: (\\\\d+)/.match(text)
  name = match_data[1]  # 첫 번째 캡처 그룹
  age = match_data[2]   # 두 번째 캡처 그룹
  puts "이름: #{name}, 나이: #{age}"
end

루비 정규 표현식에서 일치하는 내용 추출하기

패턴의 모든 발생를 추출하려면 scan 메서드를 사용합니다:

text = "support@example.com 또는 info@example.org로 문의하세요"
emails = text.scan(/\\\\w+@\\\\w+\\\\.\\\\w+/)
puts emails.inspect  # ["support@example.com", "info@example.org"]

루비 정규 표현식 실습하기

루비 정규 표현식을 이용한 문자열 대체

gsub 메서드를 사용하면 패턴의 모든 발생을 지정한 문자열로 대체할 수 있습니다:

text = "사과 바나나 사과"
new_text = text.gsub(/사과/, "오렌지")
puts new_text  # "오렌지 바나나 오렌지"

더 복잡한 대체를 위해 블록을 사용할 수도 있습니다:

text = "가격은 $10입니다"
new_text = text.gsub(/\\\\$(\\\\d+)/) do |match|
  "$#{$1.to_i * 1.1}"  # 10% 가격 인상
end
puts new_text  # "가격은 $11입니다"

루비 정규 표현식에서 대체

파이프 기호(|)를 사용하면 하나의 패턴 또는 다른 패턴과 일치시킬 수 있습니다:

/고양이|개/.match("나는 고양이를 가지고 있다")  # "고양이"와 일치
/고양이|개/.match("나는 개를 가지고 있다")  # "개"와 일치

대체를 그룹화하려면 괄호를 사용할 수 있습니다:

/(사과|바나나) 파이/.match("나는 사과 파이를 사랑한다")  # "사과 파이"와 일치

루비 정규 표현식의 문자 클래스

문자 클래스는 집합에서 임의의 단일 문자와 일치시킵니다:

/[aeiou]/.match("안녕하세요")  # "e"와 일치
/[0-9]/.match("agent007")  # "0"와 일치

문자 클래스를 부정할 수도 있습니다:

/[^0-9]/.match("agent007")  # "a"와 일치

루비 정규 표현식으로 문자열 작업하기

루비 정규 표현식에서 시작 및 끝 일치

루비는 문자열이 특정 패턴으로 시작하거나 끝나는지를 확인하는 편리한 메서드를 제공합니다:

"안녕하세요, 세상!".start_with?("안녕하세요")  # true
"안녕하세요, 세상!".end_with?("세상!")   # true

이러한 메서드는 정규 표현식을 기반으로 하지 않지만 문자열 조작 작업에서 종종 함께 사용됩니다.

루비 정규 표현식의 전역 변수

성공적인 일치 후, 루비는 여러 전역 변수를 설정합니다:

  • $& - 전체 일치된 텍스트
  • $` - 일치 전의 문자열 부분
  • $' - 일치 후의 문자열 부분
/bb/ =~ "aabbcc"
puts $`   # "aa"
puts $&   # "bb"
puts $'   # "cc"

루비 정규 표현식의 수정자

루비 정규 표현식은 패턴이 해석되는 방식을 변경하는 다양한 수정자를 지원합니다:

수정자 설명 예제
i 대소문자 구분 없이 일치 /루비/i는 "루비", "RUBY", "rUbY"와 일치합니다.
m 다중 행 모드(점이 줄 바꿈과 일치) /./m는 줄 바꿈을 포함한 임의의 문자와 일치합니다.
x 확장 모드(주석 및 공백을 허용) /패턴 # 주석/x
o #{} 보간을 한 번만 수행 /#{패턴}/o
u UTF-8 인코딩 /\\\\u{1F600}/u는 이모지 😀와 일치합니다.

예시:

/루비/ =~ "RUBY"    # nil (일치 없음)
/루비/i =~ "RUBY"   # 0 (시작 부분에서 일치)

# 'm' 수정자가 없으면 점이 줄 바꿈과 일치하지 않음
/a.b/ =~ "a\\\\nb"     # nil
# 'm' 수정자가 있으면 점이 줄 바꿈과도 일치
/a.b/m =~ "a\\\\nb"    # 0

고급 루비 정규 표현식 기술

루비 정규 표현식의 비캡처 그룹

때때로 일치된 텍스트를 캡처하지 않고 그룹화해야 할 필요성이 있습니다:

/(?:ab)+c/.match("ababc")  # "ababc"와 일치하지만 "ab"는 캡처하지 않음

루비 정규 표현식의 선행과 후행

선행 어설션은 다른 패턴이 뒤따를 경우에만 패턴과 일치시키는 기능입니다:

# '파이'가 뒤따를 경우에만 '사과'와 일치
/사과(?= 파이)/.match("사과 파이")  # "사과"와 일치
/사과(?= 파이)/.match("사과 타르트") # 일치 없음

# '파이'가 뒤따르지 않을 경우 '사과'와 일치
/사과(?! 파이)/.match("사과 타르트") # "사과"와 일치

후행 어설션은 이와 유사하게 작동하지만 앞에 있는 것을 검사합니다:

# '사과'가 뒤따를 경우에만 '파이'와 일치
/(?<=사과 )파이/.match("사과 파이")  # "파이"와 일치
/(?<=사과 )파이/.match("체리 파이") # 일치 없음

루비 정규 표현식의 성능 팁

  1. 특정성을 지니세요: 더 특정한 패턴이 일반적인 패턴보다 더 나은 성능을 발휘합니다.
  2. 과도한 백트래킹 피하기: 많은 수량사를 가진 복잡한 패턴은 성능 문제를 일으킬 수 있습니다.
  3. 앵커 사용하기: 적절할 경우 \\\\A, \\\\z, ^, $를 사용하여 일치할 수 있는 곳을 제한하세요.
  4. 대안 고려하기: 단순한 경우에는 include?start_with?와 같은 간단한 문자열 메서드가 정규 표현식보다 더 빠를 수 있습니다.

루비 정규 표현식의 결론

루비 정규 표현식은 여러분의 프로그래밍 도구 상자에서 강력한 도구입니다. 이 도구를 사용하면 간단한 구문으로 복잡한 텍스트 처리 작업을 수행할 수 있습니다. 구문이 처음에 위협적으로 보일 수 있지만, 정규 표현식을 마스터하면 루비에서 텍스트 작업 시 생산성이 크게 향상될 것입니다.

연습은 정규 표현식에 능숙해지는 열쇠입니다. 간단한 패턴부터 시작하고 기본에 익숙해지면서 점차 더 복잡한 기능을 통합하세요. Rubular과 같은 많은 온라인 도구(https://rubular.com/)가 정규 표현식을 대화식으로 테스트하고 디버깅하는 데 도움이 될 수 있습니다.

이 튜토리얼에서 다룬 개념을 이해함으로써, 여러분은 루비 프로젝트에서 다양한 문자열 조작 문제를 해결하는 데 잘 준비될 것입니다.