Вам не хватает только одного:
>> Regexp.new "\w"
=> /w/
>> Regexp.new "\\w"
=> /\w/
Обратные слэши - это экранирующие символы в строках. Если вы хотите буквальную обратную косую черту, вы должны удвоить ее.
>> string = "[ALERT] Project: Revision ...123456 committed by Me <me@me.com>\n on 2009- 07-28 21:21:47\n\n Fixed typo\n"
=> "[ALERT] Project: Revision ...123456 committed by Me <me@me.com>\n on 2009- 07-28 21:21:47\n\n Fixed typo\n"
>> r = Regexp.new("[A-Za-z]+: Revision ...[\\w]+ committed by [A-Za-z\\s]+")
=> /[A-Za-z]+: Revision ...[\w]+ committed by [A-Za-z\s]+/
>> string[r]
=> "Project: Revision ...123456 committed by Me "
Как правило, если бы вы вставили выходные данные из ваших "ломаных" строк, а не просто из ввода, вы, вероятно, заметили, что w
и s
не были экранированы правильно