使用外卡*和插入符

时间:2015-05-18 19:00:53

标签: c regex

我在C中使用正则表达式库编写了正则表达式代码。但是我遇到了外卡*和Caret的问题。

以下是我的正则表达式代码:

status = regcomp (&r, tmp, REG_EXTENDED);
if(!status) {
    if(regexec(&r, string_to_compare, 0, NULL, 0) == 0) {
        /* Do something */
    }
}

其中tmp是字符串模式,string_to_compare只是一个必须与regex r匹配的字符串。

案例1:*未按预期工作。

一个。使用模式“n1 *”

以下字符串在string_to_compare中传递:

to-dallas
newyork-to-dallas1
n1

regexec为所有上述字符串返回0,而对于字符串n1,它应返回0。

工作案例:

模式“newyork-to-dallas *”

使用与上面相同的字符串传递,

regexec仅为“newyork-to-dallas1”返回0。

案例2:Caret没有按预期工作。

使用模式“^ to-da *”和相同的字符串,regexec不会为所有字符串返回0。

如果我错过了什么,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

简而言之,*是正则表达式中的量词,表示 0或更多次出现。用.*替换它应该会产生预期的结果。

请注意,n1*也匹配输入字符串中的任何n,因为它表示n和可选的1(0次或更多次出现)。 <{1}}已经需要n1.*出现在字符串中才能返回匹配项。

n1

至于run("n1.*", "to-dallas"); // => No match run("n1.*", "newyork-to-dallas1"); // => No match run("n1.*", "n1"); // => Match "n1" (和newyork-to-dallas*),它将匹配newyork-to-dallas.*

newyork-to-dallas1

对于插入符号,它在字符串的开头匹配。

run("newyork-to-dallas*","newyork-to-dallas1"); // => Matches "newyork-to-dallas"
run("newyork-to-dallas.*","newyork-to-dallas1"); // => Matches "newyork-to-dallas1" as .* matches "1"

查看完整的demo program on CodingGround