регулярное выражение — применение к изменённой части строки
От: Гест Украина https://zverok.github.io
Дата: 25.11.09 08:20
Оценка:
Привет.
Есть регексп, к примеру:
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: Перенесено модератором из 'Алгоритмы' — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.