Оптимизация регулярного выражения.

программирование регулярные выражения поиск с возвратом оптимизиция

Имеется регулярное выражение
(.+?)( )*=( )*(.+?)( )*;
Для полноты скажу, что используется оно для чтения строк конфиг-файла (строки вида "имя_параметра = значение_параметра;"), при этом количество пробелов не критичное для понимаемости строк, все левые строки считаются комментариями.
Поиск в данном случае является поиском с возвратом из-за вредных + ?и *
Возможно ли как-то оптимизировать данное регулярное выражение, избегнув поиска с возвратом, но не утратив функциональности?

Примечание:
Поиск пробелов убирать нельзя по той причине, что первая группа в дальнейшем будет использоваться как имя переменной, а 4-ая группа как её значение, поэтому нежелательно, чтобы посреди имени (или в конце его) был пробел.

Примечание:
Возможно ли вообще избегнуть поиска с возвратом?
В случае, если строка конфиг-файла почти соответствует шаблону (например "parameter = 45 d" или "parameter = 121") ошибка несовпадения будет происходить только в самом конце строки, поиск вернётся к началу и начнёт перебирать новые символы заново, что может сильно ухудшить производительность, если строка будет длинной (как утверждают на msdn ухудшение производительности в 2 раза при добавлении каждого нового символа к длине строки).
Ответы:
По виду регулярного выражения могу сказать, что как минимум можно убрать все ( )*, так как выражение (.+?) уже захватит пробелы.
#2
Ваш вариант с нежадным поиском все чуть быстрее, если не группировать пробелы.
(.+?) *= *(.+?) *;


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.