Если вы хотите добавить методы к любому классу (в данном случае String
), без необходимости его исправления, вам следует рассмотреть возможность использования уточнений .
module StringRefinements
refine String do
def already_taken?
puts "yes!"
end
end
end
# in another file...
using StringRefinements
"Charlotte".already_taken?
Метод already_taken?
будет доступен только в области, которая вызывает using StringRefinements
, и больше нигде.
Вам нужно отрицательное предварительное утверждение - что-то вроде этого:
/^one two(?!.*three)/m
Вот учебное руководство на lookahead/lookbehind утверждениях
Примечание: Я добавил 'm' модификатор так, чтобы ^ соответствовал запуску строки, а не запуску целой строки.