Привет.
Есть регексп, к примеру:
string.gsub(/(\s)(\d)(\s)/, '\1\2^')
(читается так: если перед и после цифры идут пробелы, то первый пробел сохранить, а после — заменить на «^»)
применение:
"wtf 1 wtf.gsub(/(\s)(\d)(\s)/, '\1\2^') #=> "wtf 1^wtf"
теперь предположим, что он должен бы примениться 2 раза подряд:
'1 1 1 '.gsub(/(\s)(\d)(\s)/, '\1\2^') #=> хотелось получить '1 1^1^', а получается '1 1^1 '
очевидно, что когда регексп проверяется на второй единице, он считает, что перед ней уже не пробел, а крышка. хорошо, изменяем регексп:
'1 1 1 '.gsub(/(\s|\^)(\d)(\s)/, '\1\2^')
увы, результат не меняется (т.е. после второй единицы по-прежнему остаётся пробел).
Вопрос: у кого не едут лыжи? (варианты: 1. глючит движок регекспов в Руби, которым я пользуюсь; 2. я чего-то не понимаю про применение регекспов к уже обработанной части строки)
26.11.09 14:06: Перенесено модератором из 'Алгоритмы' — Кодт