2013-08-21 3 views
1

Есть ли «готовый способ»/библиотека для извлечения шаблонов для использования с sprintf() или std::cout из шаблонов регулярных выражений?Обратное применение регулярных выражений

Для проверки регулярных выражений шаблона Я использую "regex.h"

и хранения данных, подтверждающих модели, как, например:

"A((\\+|\\-)(\\d|\\.){6})\\r" 
"G((\\+|\\-)(\\d|\\.){6})\\r" 

Я хочу иметь что-то вроде "A+%06f", "G+%06f".

+1

Нет способа сделать это, но для простых случаев вы можете написать свой собственный. Этот ответ находится в [A +] регулярных выражениях: http://stackoverflow.com/a/28862668/2642059 –

ответ

0

"regex.h", с которым я столкнулся (с некоторой версией GNU libc), как представляется, выделяет много распределений памяти, когда регулярное выражение создавалось во время выполнения, что делает его неэффективным для простых шаблонов, таких как спецификаторы формата, поэтому я сомневаюсь, что фактическая реализация библиотеки C будет использовать regex.h для спецификаторов формата, что, в свою очередь, маловероятно, чтобы существовала такая функция, как тот, который вы ищете.

Кроме того, ваши регулярные выражения, похоже, соответствуют строкам, таким как "A+......", которые не соответствуют ни одному из спецификаторов формата, которые вы указали.

+0

Нет, это не похоже на строки, такие как «A + ......» ». И regex.h - это POSIX, а не какая-то версия GNU libc. И вопрос был не в существовании такой функции в libc. – Maquefel

+0

@Maquefel: '(\ d | \.) {6}' matches "......", [example] (http: //regexpal.com/? Flags = g & regex =% 28 \ d | \. % 29 {6} & вход = ......% 201,2345). – Zeta

+0

@ Zeta - да. Если вопрос непонятен, я могу уточнить. Вопрос не о шаблоне совпадений, а о готовой библиотеке, которая может распознать (\\ + | \\ -) \\ d {6} в шаблоне и заменить, например, на% + 06d. Если кто-то знает о существовании такого lib, он даст информацию об этом. – Maquefel