Использование sed-эквивалента в программе на C - PullRequest
2 голосов
/ 09 марта 2009

У меня есть строковый ввод в мою программу в виде:

против * .cc

Я хочу, чтобы это представляло регулярное выражение, con. *. Cc.

Как я могу сделать это внутри программы на C? Есть ли что-то вроде sed, которое я могу использовать?

Ответы [ 5 ]

4 голосов
/ 09 марта 2009

Я предполагаю, что вы действительно хотите globbing , а не полный регулярных выражений. Если вы работаете в Linux, вы можете использовать функцию glob . Я предполагаю, что есть более портативный способ сделать это, но я не знаю ни одного случайного.

2 голосов
/ 09 марта 2009

Вы можете использовать PCRE для сопоставления регулярных выражений. Фактическое выражение может быть сохранено как массив символов (как любая другая строка).

1 голос
/ 10 марта 2009

Эта страница описывает заголовок , который реализует поддержку регулярных выражений POSIX для C. Чтобы использовать это, вы просто делаете:

#include <sys/types.h>
#include <regex.h>

С ними довольно приятно и легко работать, но, как сказал @Chickencha в другом ответе, похоже, что вы просто пытаетесь сгладить имена файлов, а не выполнять настоящее сопоставление с регулярными выражениями. Просто подумал, что укажу, что в Си действительно есть поддержка регулярных выражений, поскольку никто этого не сделал.

1 голос
/ 09 марта 2009

Что именно вы хотели бы сделать с этим регулярным выражением? Предполагая, что вы захотите выполнить поиск по набору строк, которые уже есть в вашем коде, вам нужно будет использовать библиотеку регулярных выражений. C не поддерживает регулярные выражения. Посмотрите руководство gcc - здесь .

0 голосов
/ 09 марта 2009

Используйте sed из своей программы:

  1. вилка ()
  2. установить stdin / stdout в дочернем процессе
  3. exec (sed s / X / Y /) в дочернем (или любой другой операции, которую вы хотите)
  4. родитель помещает данные в sed, читает данные из sed
  5. родитель пожинает sed после завершения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...