1

以下は、文字列に記号が含まれているかどうかを確認したいが、$エラーが表示されているコードです。error: unknown escape sequence '\$'

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

#define MAX_MATCHES 1 //The maximum number of matches allowed in a single string

void match(regex_t *pexp, char *sz) {
        regmatch_t matches[MAX_MATCHES]; //A list of the matches in the string (a list of 1)
        //Compare the string to the expression
        //regexec() returns 0 on match, otherwise REG_NOMATCH
        if (regexec(pexp, sz, MAX_MATCHES, matches, 0) == 0) {
                printf(" matches characters ");
        } else {
                printf(" does not match\n");
        }
}

int main() {
        int rv;
        regex_t exp; //Our compiled expression
        //1. Compile our expression.
        //Our regex is "-?[0-9]+(\\.[0-9]+)?". I will explain this later.
        //REG_EXTENDED is so that we can use Extended regular expressions
        rv = regcomp(&exp, "\$", REG_EXTENDED);
        if (rv != 0) {
                printf("regcomp failed with %d\n", rv);
        }
        //2. Now run some tests on it
        match(&exp, "Price of iphone is $800 ");

        //3. Free it
        regfree(&exp);
        return 0;
}
4

4 に答える 4

4

バックスラッシュをエスケープする必要があります。

rv = regcomp(&exp, "\\$", REG_EXTENDED); 
于 2012-09-11T09:16:53.760 に答える
3

文字列リテラルのバックスラッシュもエスケープします: "\\$"

于 2012-09-11T09:16:48.883 に答える
3

私はしばらくCの正規表現を行っていませんが、メモリから、最初のエスケープバックスラッシュはCエスケープと見なされ、2番目のバックスラッシュは$のエスケープとして正規表現エンジンに渡されるため、バックスラッシュを二重にする必要があります. すなわち\\$

そのさらなる例として、C 正規表現でバックスラッシュをチェックしたい場合は、使用する必要があります\\\\

于 2012-09-11T09:17:50.170 に答える
1

この正規表現のようにバックスラッシュを含む文字列を作成する場合は、バックスラッシュを別のバックスラッシュでエスケープする必要があります。

regcomp(&exp, "\\$", REG_EXTENDED); 
于 2012-09-11T09:17:14.670 に答える