Настройте таблицу сопоставления:
map = {'☺' => ':)', '☹' => ':(' }
Затем создайте регулярное выражение:
re = Regexp.new(map.keys.map { |x| Regexp.escape(x) }.join('|'))
И, наконец, gsub
:
s = str.gsub(re, map)
Если вы застряли на 1,8 земле, тогда:
s = str.gsub(re) { |m| map[m] }
Вам понадобится Regexp.escape
, если все, что вы хотите заменить, имеет особое значение внутрирегулярное выражениеИли, благодаря steenslag, вы можете использовать:
re = Regexp.union(map.keys)
, и за вас позаботятся о цитировании.