Ruby의 문자열

2020-12-16

Ruby에서 문자열을 다루는 방법에 대해서 살펴봅니다.

개요

이번 블로그에서는 Ruby에서 문자열을 사용함에 있어 도움이 되는 방법들을 소개하려고 합니다.

문자열 검색

Ruby에서 문자열을 검색할 때는 index 메서드를 사용합니다.

puts "ABCD".index("C")
# 2

검색한 문자열이 해당 문자열에 존재하는 경우 해당 문자열에 위치를 반환하고, 존재하지 않는 경우 nil을 반환합니다.

문자열 치환

문자열에 각 문자를 index로 참조하고 대입할 수 있습니다.

a = "Apple Juice"
a[0] = "O"
a[1] = "r"
a[2] = "a"
a[3] = "n"
a[4] = "ge"
puts a
# Orange Juice

위에서도 알 수 있듯이, a[4] = "ge"처럼 문자열의 길이가 달라도 문자열을 치환할 수 있습니다.

정규 표현

다른 언어와 같이 Ruby에서도 정규 표현식을 사용하여 문자열을 검색할 수 있습니다.

메타 문자

정규 표현에서는 메타 문자(특수한 의미를 가진 문자)를 사용하여 정규 표현식을 만듭니다.

메타 문자설명
[][]안에 있는 문자 중 어느 한 문자
.임의의 한 문자
*직전 표현을 0번 이상 반복
+직전 표현을 1번 이상 반복
?직전 표현을 0번 또는 1번 반복
()정규 표현 그룹
a|ba, b 중 어느 하나
\s공백 문자
\w영숫자나 언더바(_)
\d숫자(0~9)
^맨 앞
$맨 뒤

패턴 매치

정규 표현식을 사용하여 문자열을 검색할 수 있습니다.

puts /R.by/ =~ "Let's study Ruby!"
# 12

문자열 검색 함수인 index와 마찬가지로 패턴이 일치하면, 일치한 패턴의 index를 반환하고, 패턴이 매치되지 않으면 nil을 반환합니다.

Regexp 클래스

정규 표현을 Regexp 클래스의 new메서드를 사용하여 정규 표현 오브젝트를 생성할 수 있습니다.

re = Regexp.new("R.by")
puts re =~ "Let's study Ruby!"
# 12

정규 표현 오브젝트

정규 표현 오브젝트를 사용하면 정규 표현식을 더욱 효과적으로 활용할 수 있습니다.

  • 정규 표현 오브젝트 x: x를 사용하면 정규 표현식 안에 #을 통해 주석을 추가할 수 있습니다.

      re =/R.by # Search Ruby/x
      puts re =~ "Let's study Ruby!"
      # 12
    
  • 정규 표현 오브젝트 i: i를 사용하면 대소문자 구분없이 문자열을 찾을 수 있습니다.

      re =/r.by/i
      puts re =~ "Let's study Ruby!"
      # 12
    

심벌

심벌(symbol)은 임의의 문자열과 일대일로 대응하는 값을 나타내는 클래스입니다.

a = :apple
b = :apple
c = :orange

puts a == b # true
puts a == c # false

a와 b는 같은 이름의 심벌이므로 같은 오브젝트를 나타내고 있습니다.

심벌과 문자열

심벌 오브젝트에 to_s를 사용하면 문자열로 치환할 수 있으며, 문자열에 intern을 사용하면 심벌로 치환할 수 있습니다.

a = :apple
b = "apple"

puts a # apple
puts b # apple
puts a == b # false
puts a.to_s == b # true
puts a == b.intern # true

심벌의 활용

심벌은 수치와 똑같은 것이므로 문자열을 사용하는 것보다 메모리나 실행 속도면에서 효율적인 경우가 많습니다.

def triangle(value)
  value[:a] + value[:b] + value[:c]
end

test = {:a => 5, :b => 2, :c => 5}
puts triangle(test)
# 12

심벌은 보통 해시의 키로 많이 사용됩니다.

퍼센트 기법

문자열은 보통 큰따옴표(“)나 작은따옴표(‘)로 묶어서 나타내지만, % 기법을 사용하여 나타낼 수도 있습니다.

puts %{This string has " character}
# This string has " character
puts %Q{This string has " character}
# This string has " character
puts %q{This string has ' character}
# This string has ' character

또한 %w를 사용하여 스페이스로 구분된 문자열을 배열로 변환할 수 있습니다.

puts %w(apple orange banana)
# apple
# orange
# banana

완료

이것으로 Ruby에서 문자열을 다루는 다양한 방법에 대해서 알아보았습니다. 정규 표현은 다른 언어에서도 많이 활용되는 부분이므로 잘 기억해 두면, 많은 곳에서 활용할 수 있습니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts