2009-08-25 19 views
4

C#やPHPで正規表現を実行するのは今のところとても簡単です。しかし、現在私はCで正規表現を使う必要があります。そして、私はregcompやregexecの使い方を完全に理解していないようです。それは確かに私のCの経験の欠如のためです。Cでの正規表現

ご協力いただきありがとうございます!

答えて

5

を持っています。以下はその議論と一致する簡単なプログラムです。しかし、比較的新しいC言語の場合は、ポインタと配列を使って作業するので、regex(3)でゆっくりと進みたいと思っています。オフセットとライオンとトラと熊をregmatch_tで提供します。 ;)

$ ./regexec '[[:digit:]]' 56789 alpha " " foo12bar 
matched: 56789 
matched: foo12bar 
$ ./regexec '[[:digit:]](foo' 
error: Unmatched (or \(
$ ./regexec '[' 
error: Invalid regular expression 

...ソース:

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

int main(int argc, char **argv) { 
    int r; 
    regex_t reg; 

    ++argv; /* Danger! */ 

    if (r = regcomp(&reg, *argv, REG_NOSUB|REG_EXTENDED)) { 
    char errbuf[1024]; 
    regerror(r, &reg, errbuf, sizeof(errbuf)); 
    printf("error: %s\n", errbuf); 
    return 1; 
    } 

    for (++argv; *argv; ++argv) { 
    if (regexec(&reg, *argv, 0, NULL, 0) == REG_NOMATCH) 
     continue; 
    printf("matched: %s\n", *argv); 
    } 

    return 0; 
} 
+0

完璧な感謝君は! – Dave

+0

また、これを見ている他の人にとっては、John Millikinの答えはまあまあです。彼の提供する例はPCREのためのもので、ピルクロウはGNU C Libの正規表現用です。 – Dave

7

PCREライブラリを使用してください。例は、ソースのdemo/ディレクトリに含まれています。 Here's a direct link to pcredemo.c

+0

Perl互換正規表現ライブラリが - ではありません人権法違反? –

+0

PCREはかなり標準的なので、正規表現を扱うライターやメンテナーにとっては非常に簡単です。 – strager

+0

そして...私が必要とするのは、C言語でのPCRE使用の例です。TT – Dave

2

これを提供するライブラリが必要です。そこからいくつか選択する必要があります。 PCREは1です。

+0

JohnとDirkにはすでにPCREがインストールされていますが、C言語の使用法に興味があると思います。 – Dave

0

GNU Cライブラリを使用すると、regex(3)機能を示すように、これは、あなたが始めることregex library

+0

はい、私はそれを使用する方法を理解できませんでした...つまり、regcompとregexec関数 – Dave