字符选择器¶ ↑
字符选择器¶ ↑
字符选择器是某些 Ruby 方法接受的字符串参数。 这些实例方法中的每一个都接受一个或多个字符选择器
-
String#tr
(选择器, 替换): 返回一个新的字符串。 -
String#tr!
(选择器, 替换): 返回self
或nil
。 -
String#tr_s
(选择器, 替换): 返回一个新的字符串。 -
String#tr_s!
(选择器, 替换): 返回self
或nil
。 -
String#count(*选择器)
: 返回指定字符的计数。 -
String#delete(*选择器)
: 返回一个新的字符串。 -
String#delete!(*选择器)
: 返回self
或nil
。 -
String#squeeze(*选择器)
: 返回一个新的字符串。 -
String#squeeze!(*选择器)
: 返回self
或nil
。
字符选择器标识 self
中要用作方法操作数的零个或多个字符。
在本节中,我们使用方法 String#delete(选择器)
进行说明,该方法删除所选字符。
在最简单的情况下,所选字符与选择器本身包含的字符完全相同
'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(*选择器)
: 返回指定字符的计数。 -
String#delete(*选择器)
: 返回一个新的字符串。 -
String#delete!(*选择器)
: 返回self
或nil
。 -
String#squeeze(*选择器)
: 返回一个新的字符串。 -
String#squeeze!(*选择器)
: 返回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')