Spec-Zone.ru › Ruby 3.3

Селекторы символов

Селектор символов

Селектор символов — это строковый аргумент, принимаемый определёнными методами Ruby. Каждый из этих методов экземпляра принимает один или несколько селекторов символов:

  • String#tr(selector, replacements): возвращает новую строку.

  • String#tr!(selector, replacements): возвращает self или nil.

  • String#tr_s(selector, replacements): возвращает новую строку.

  • String#tr_s!(selector, replacements): возвращает self или nil.

  • String#count(*selectors): возвращает количество указанных символов.

  • String#delete(*selectors): возвращает новую строку.

  • String#delete!(*selectors): возвращает self или nil.

  • String#squeeze(*selectors): возвращает новую строку.

  • String#squeeze!(*selectors): возвращает self или nil.

Селектор символов идентифицирует ноль или более символов в self, которые должны быть операндами для метода.

В этом разделе мы иллюстрируем использование метода String#delete(selector), который удаляет выбранные символы.

В самом простом случае выбранные символы — это именно те, которые содержатся в самом селекторе:

'abracadabra'.delete('a')   # => "brcdbr"
'abracadabra'.delete('ab')  # => "rcdr"
'abracadabra'.delete('abc') # => "rdr"
'0123456789'.delete('258')  # => "0134679"
'!@#$%&*()_+'.delete('+&#') # => "!@$%*()_"
'тест'.delete('т')          # => "ес"
'こんにちは'.delete('に')     # => "こんちは"

Обратите внимание, что порядок и повторения не имеют значения:

'abracadabra'.delete('dcab') # => "rr"
'abracadabra'.delete('aaaa') # => "brcdbr"

В селекторе символов эти три символа получают специальное обращение:

  • Ведущая запятая ('^') выполняет функцию оператора «не» для символов справа от неё:

    'abracadabra'.delete('^bc') # => "bcb"
    '0123456789'.delete('^852') # => "258"
    
  • Дефис ('-') между двумя другими символами определяет диапазон символов вместо простого набора символов:

    'abracadabra'.delete('a-d') # => "rr"
    '0123456789'.delete('4-7')  # => "012389"
    '!@#$%&*()_+'.delete(' -/') # => "@^_"
    
    # May contain more than one range.
    'abracadabra'.delete('a-cq-t') # => "d"
    
    # Ranges may be mixed with plain characters.
    '0123456789'.delete('67-950-23') # => "4"
    
    # Ranges may be mixed with negations.
    'abracadabra'.delete('^a-c') # => "abacaaba"
    
  • Обратная косая черта ('\') служит для экранирования запятой, дефиса или другой обратной косой черты:

    'abracadabra^'.delete('\^bc')   # => "araadara"
    'abracadabra-'.delete('a\-d')   # => "brcbr"
    "hello\r\nworld".delete("\r")   # => "hello\nworld"
    "hello\r\nworld".delete("\\r")  # => "hello\r\nwold"
    "hello\r\nworld".delete("\\\r") # => "hello\nworld"
    

Множественные селекторы символов

Эти методы экземпляра принимают несколько селекторов символов:

  • String#count(*selectors): возвращает количество указанных символов.

  • String#delete(*selectors): возвращает новую строку.

  • String#delete!(*selectors): возвращает self или nil.

  • String#squeeze(*selectors): возвращает новую строку.

  • String#squeeze!(*selectors): возвращает self или nil.

По сути, заданные селекторы объединяются в один селектор, состоящий только из тех символов, которые общие для всех заданных селекторов.

Все формы селекторов могут быть использованы, включая отрицания, диапазоны и экранирования.

Каждая из этих пар вызовов метода эквивалентна:

s.delete('abcde', 'dcbfg')
s.delete('bcd')

s.delete('^abc', '^def')
s.delete('^abcdef')

s.delete('a-e', 'c-g')
s.delete('cde')

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API