我在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。
如果我错过了什么,请告诉我。提前谢谢。
答案 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"