C#やPHPで正規表現を実行するのは今のところとても簡単です。しかし、現在私はCで正規表現を使う必要があります。そして、私はregcompやregexecの使い方を完全に理解していないようです。それは確かに私のCの経験の欠如のためです。Cでの正規表現
ご協力いただきありがとうございます!
C#やPHPで正規表現を実行するのは今のところとても簡単です。しかし、現在私はCで正規表現を使う必要があります。そして、私はregcompやregexecの使い方を完全に理解していないようです。それは確かに私のCの経験の欠如のためです。Cでの正規表現
ご協力いただきありがとうございます!
を持っています。以下はその議論と一致する簡単なプログラムです。しかし、比較的新しい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(®, *argv, REG_NOSUB|REG_EXTENDED)) {
char errbuf[1024];
regerror(r, ®, errbuf, sizeof(errbuf));
printf("error: %s\n", errbuf);
return 1;
}
for (++argv; *argv; ++argv) {
if (regexec(®, *argv, 0, NULL, 0) == REG_NOMATCH)
continue;
printf("matched: %s\n", *argv);
}
return 0;
}
PCREライブラリを使用してください。例は、ソースのdemo/
ディレクトリに含まれています。 Here's a direct link to pcredemo.c
。
GNU Cライブラリを使用すると、regex(3)
機能を示すように、これは、あなたが始めることregex library
はい、私はそれを使用する方法を理解できませんでした...つまり、regcompとregexec関数 – Dave
libslackもあります(文字列) - 文字列のモジュール:
は
完璧な感謝君は! – Dave
また、これを見ている他の人にとっては、John Millikinの答えはまあまあです。彼の提供する例はPCREのためのもので、ピルクロウはGNU C Libの正規表現用です。 – Dave