проблему регулярных выражений в рубин, и по какой-то причине, мне это нужно в одна линия в методе GSUB рубинаRegex заменить подстроку вхождения * только *, когда они заключены между начала/конца скобки
Пусть вход sample
переменной строка многострочные строк, как показано ниже
begin1 item abc item abc item
extra end1
begin2 item abc item abc extra end2
begin1 item abc item abc extra end1
правила изменить все item
, которые внутри блок begin1
и end1
в love
, он может через несколько линий
После замены, выход sample
должен быть
begin1 love abc love abc love
extra end1
begin2 item abc item abc extra end2
begin1 love abc love abc love end1
решение что-то вроде этого
puts sample.gsub!(/(begin1.*)item*(.*end1)/m,'\1love\2')
Итак, магия, и она работает именно то, что я хочу. И он отлично работает для малого ввода, когда он идет большим, он сообщает 'Переполнение стека в матче регулярного выражения' –
Ответ достаточно хорош,' переполнение стека 'связано только с ruby 1.8.7, решение отлично работает в 1,9. спасибо alexis. см. реальный скрипт https://github.com/larrycai/sdcamp/commit/923237e5c –
@larrycai Я только что протестировал его в ruby 1.8.7 - он работал для меня просто отлично ... – Alexis