如何使用regex.h查找美元符号

时间:2012-09-11 09:15:32

标签: c regex

下面是我的代码,我想在其中查找字符串是否包含$符号,但它显示错误: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 个答案:

答案 0 :(得分:4)

你需要逃避反斜杠:

rv = regcomp(&exp, "\\$", REG_EXTENDED); 

答案 1 :(得分:3)

转义字符串文字中的反斜杠:“\\$"

答案 2 :(得分:3)

我还没有完成C正则表达式的一段时间,但是从内存中你必须双重转义反斜杠,因为第一个被视为C转义,第二个被转移到正则表达式引擎作为转义对于$。即\\$

作为另一个例子,如果你想检查C正则表达式中的反斜杠,你需要使用\\\\

答案 3 :(得分:1)

如果要创建包含反斜杠的字符串(如此正则表达式),则需要使用另一个反斜杠转义反斜杠:

regcomp(&exp, "\\$", REG_EXTENDED);