3

部分文字列の照合、検索、および置換のために GNU G++ / GCC で正規表現を使用するにはどうすればよいですか? たとえば、およびその他のチュートリアルを提供できますregex_tか?

1時間以上グーグルで調べても、わかりやすいチュートリアルやマニュアルはありませんでした。

4

3 に答える 3

4

BoostC ++正規表現ライブラリを使用することを強くお勧めします。本格的なC++を開発している場合、Boostは間違いなく考慮しなければならないものです。

ライブラリは、PerlとPOSIXの両方の正規表現構文をサポートしています。私は個人的にPerlの正規表現を好みます。なぜなら、それらはより直感的で正しく理解しやすいと信じているからです。

http://www.boost.org/doc/libs/1_46_0/libs/regex/doc/html/boost_regex/syntax.html

ただし、この優れたライブラリについての知識がない場合は、ここから始めることをお勧めします。

http://www.boost.org/doc/libs/1_46_0/libs/regex/doc/html/index.html

于 2011-03-03T19:30:22.533 に答える
3

ここで答えを見つけました:

#include <regex.h>
#include <stdio.h>

int main() 
{
  int r;
  regex_t reg;

  if (r = regcomp(&reg, "\\b[A-Z]\\w*\\b", REG_NOSUB | REG_EXTENDED)) 
  {
    char errbuf[1024];

    regerror(r, &reg, errbuf, sizeof(errbuf));
    printf("error: %s\n", errbuf);

    return 1;
  }

  char* argv[] = { "Moo", "foo", "OlOlo", "ZaooZA~!" };

  for (int i = 0; i < sizeof(argv) / sizeof(char*); i++) 
  {
    if (regexec(&reg, argv[i], 0, NULL, 0) == REG_NOMATCH)
      continue;

    printf("matched: %s\n", argv[i]);
  }

  return 0;
}

上記のコードは、

matched: Moo 
matched: OlOlo 
matched: ZaooZA~!
于 2011-03-03T22:17:11.750 に答える
2

マニュアルは簡単に見つけられるはずです: POSIX 正規表現関数. それがわからない場合は、C および C++ のスキルを磨くことを強くお勧めします。

一致した部分文字列を実際に置き換えることは、まったく別の問題であり、正規表現関数では役に立たないことに注意してください。

于 2011-03-03T10:33:34.610 に答える