Skif_off wrote:Изменено: квантификаторы регулярных выражений теперь обладают классической жадностью. Чтобы сделать их сверхжадными (старый принцип), используется "+" после квантификатора, например, "\d*+".
4.9.1 dev, есть файл, по структуре как обычный ini
Параметр=Значение, нужно убрать все значения, пишу
В 4.8.5 работало номально, сейчас захватывается всё. Но звездочка должны быть в любом случае - не все параметры со значением. Сработало только так
^([^=]+=).*?$
Почему, если по умолчанию не жадные?
Просто Вы где-то запутались.
Прочитайте внимательно цитату, которую Вы привели, ну или AkelHelp-Rus.htm
".*" - обладает классической жадностью, т.е. этот шаблон просто обязан захватить максимальный вариант текста, с перебором из возможных (весь текст до конца), а ".*?" - ленивый шаблон, который захватит минимальный вариант, с перебором из возможных (одна строка).
Для описанного случая, лучше использовать такой шаблон:
-при использовании на больших файлах не будет тормозить, т.к. время затрачиваемое кодом движка регэкспов на проверку шаблона, будет минимальным.
Skif_off wrote:
И еще не понял по началу и концу строки:
должно быть равно
или нет? В 4.8.5 оба выражения работают одинаково.
Нет, это не равнозначные шаблоны.
1. Совпадает если:
а) Сразу за началом строки следует любой символ ноль или более раз;
б) следует символ конца строки.
Причем будет выбран максимально возможный вариант, т.е. весь текст до самого последнего символа конца строки.
2. Совпадает если:
а) Сразу за началом строки следует любой символ, кроме перевода строки и перевода каретки, ноль или более раз.
б) следует символ конца строки
Даже при условии жадности квантификатора "*", захвачена будет всего одна строка, т.к. из захватываемого диапазона исключены перевод строки и перевод каретки.