Как извлечь строки из строки c с помощью регулярного выражения

#c #regex #string

#c #регулярное выражение #строка

Вопрос:

Я использую регулярное выражение с помощью #include <regex.h> Если у меня есть строка s, как я могу использовать регулярное выражение для поиска шаблона p?

Комментарии:

1. Какое regex.h? Тот, что в Unix? Вам лучше указать это, поскольку это не стандартный заголовок C или C.

2. Я просто использую тот, который уже есть, поэтому по умолчанию, что бы это ни было. Я работаю в OSX, которая в основном такая же, как Linux.

3. Какой у вас компилятор и операционная система? В любом случае, если вам нужна кросс-платформенная и кросс-компиляторная совместимость и хороший OO-интерфейс, я предлагаю попробовать Boost.Regex. boost.org/doc/libs/1_46_1/libs/regex/doc/html/index.html

4. Я работаю в OSX и использую g .

5. Вам доступны две очень разные библиотеки регулярных выражений. #include <regex.h> это библиотека C, стандартизированная POSIX.1-2001. #include <regex> стандартизирована ли библиотека C в C TR1. Вероятно, вы найдете библиотеку регулярных выражений C более полезной.

Ответ №1:

 #include <regex.h>
#include <iostream>
#include <string>

std::string
match(const char *string, char *pattern)
{

// Adapted from:
   http://pubs.opengroup.org/onlinepubs/009695399/functions/regcomp.html

    int    status;
    regex_t    re;
    regmatch_t rm;


    if (regcomp(amp;re, pattern, REG_EXTENDED) != 0) {
        return "Bad pattern";
    }
    status = regexec(amp;re, string, 1, amp;rm, 0);
    regfree(amp;re);
    if (status != 0) {
        return "No Match";
    }
    return std::string(string rm.rm_so, string rm.rm_eo);
}

int main(int ac, char **av) {
    // e.g. usage: ./program abcdefg 'c.*f'
    std::cout << match(av[1], av[2]) << "n";
}
  

Ответ №2:

Проверьте http://msdn.microsoft.com/en-us/library/bb982821.aspx , содержит подробное описание использования регулярных выражений. из блога MS vc.

       const regex r("[1-9]\d*x[1-9]\d*");

      for (string s; getline(cin, s); ) {
               cout << (regex_match(s, r) ? "Yes" : "No") << endl;
      }
  

Комментарии:

1. Здесь подробно описывается использование <regex> . OP запросил пример <regex.h> . Это не один и тот же API.