Я не вижу никого, кто бы упоминал то, что я считаю очевидным ответом, используя строку сканирования:
str = "cat cat cat catcat"
str.scan('cat').size #=> 5
Если у вас просто есть для использования регулярного выражения:
str.scan(/cat/).size #=> 5
Если вы хотите поймать только уникальные, а не случайные совпадения:
str.scan(/\bcat\b/).size #=> 3
РЕДАКТИРОВАТЬ:
@ sawa указывает, что есть (значительное)возможность неверного толкования вопроса ОП.Это охватывает случаи, когда OP не хотел, чтобы выполнялся поиск, если в строке было что-то кроме cat
и " "
.
str.scan('cat').size if str.gsub(/(?:cat| )+/, '').empty? #=> 5
Другие варианты в моем предыдущем разделе все еще могут быть применены.
И, поскольку "пробел" может означать больше, чем простой пробел, "\s"
также должен нормально работать.