Spec-Zone.ru › Ruby 3.2

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

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

Селектор символов — это строковый аргумент, принимаемый определёнными методами 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