2017-01-22 2 views
0

Я пишу простой синтаксический анализатор конфигурационных файлов в C++ 11 и хочу использовать регулярное выражение для выбора пар ключ = значение из текстового файла. Я хочу иметь возможность поддерживать комментарии в этом файле, обозначенные символом #. До сих пор у меня есть следующие:Regex: игнорировать конечные пробелы в группе захвата

^(\w+)\s*=\s*([^#]+) 

Это соответствует алфавитно-цифровое имя параметра, начиная с начала строки, позволяет необязательного пропуска вокруг = символ, а затем захватывает все до символа комментария. Это, кажется, работает довольно хорошо, так как в следующем примере, за исключением:

param_1 = тест с комментарием # комментарием

Вторая группа записи фиксирует пропуска между концом значения параметра и символом #. В любом случае, я могу заставить это игнорировать любые конечные пробелы во второй группе захвата?

+0

Какой язык/инструмент вы используете? –

+0

Я использую C++ 11 и std :: regex_search – rozzy

ответ

1

Это регулярное выражение работает с вашим примером:

^(\w+)\s*=\s*([^#\n]+?)\s*(?=#|$) 

Это оригинал регулярных выражений, изменен, чтобы не быть жадным для второй группы, и матч до непечатаемых перед # или конец-линии найдены.

Here пример.

+0

Это отлично работает, спасибо! – rozzy

Смежные вопросы