Это очень смешно, потому что вы натолкнулись на ошибку специально для букв k и s при использовании \ W с/i (это как идеальный шторм).
Вот ссылка, которая объясняет ошибку: https://bugs.ruby-lang.org/issues/4044
Возможно, это была исправлена в более поздней версии рубин, но если вы не чувствуете, как идти через хлопот идти к новой версии рубин, то вы можете просто сделать явно инвертированный символьный класс всех согласных:
/^[^bcdfghjklmnpqrstvwxyz]|^$/i
Вот является Rubular ссылка: http://rubular.com/r/URgsWP3suQ
Edit: Так, что-то еще я заметил что ваше регулярное выражение (и регулярное выражение, приведенное выше) соответствует только первой букве слов, где в качестве регулярного выражения, которое я предоставил, соответствует всему слову. Я не знаю, имеет ли это значение для вас, но я чувствовал, что стоит отметить. Пожалуйста, увидеть разницу в подсветке в Rubular ссылке выше и один ниже (Посмотрите, как ссылка выше, только подчеркивает первую букву слова, где, как ссылка ниже выдвигает на первый план целые слова):
^[^bcdfghjklmnpqrstvwxyz].*|^$
http://rubular.com/r/IVJ03uOK4h
Это соответствует \ W. Однако я не знаю, почему. – Albin
Кроме того, он подходит только при использовании с i-Modifier и внутри символьного стекла. –
Это ошибка в регулярном выражении Ruby. См. ['[\ W]'] (https://ideone.com/mIi82W), он соответствует 'k' /' K' и 's' /' S' (да, только с '/ i'). –