gpt4 book ai didi

c - 正则表达式 C 无法按预期使用通配符 * 和插入符

转载 作者:行者123 更新时间:2023-11-30 21:10:17 24 4
gpt4 key购买 nike

我已经使用 C 中的正则表达式库编写了正则表达式代码。但是我在通配符 * 和插入符方面遇到了一些问题。

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

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

其中 tmp 是一个字符串模式,而 string_to_compare 只是一个必须与正则表达式 r 匹配的字符串。

情况 1:* 未按预期工作。

a.使用模式“n1*”

以下字符串在 string_to_compare 中传递:

to-dallas
newyork-to-dallas1
n1

regexec 对于上述所有字符串都返回 0,而对于字符串 n1,预期返回 0。

工作案例:

模式为“newyork-to-dallas*”

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

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

情况 2:插入符未按预期工作。

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

如果我遗漏了什么,请告诉我。提前致谢。

最佳答案

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

请注意,n1* 还匹配输入字符串内的任何 n,因为它表示 n 和可选的 1(0 次或多次出现)。 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"

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

// Caret
run("^to-da.*", "to-dallas"); => Matches "to-dallas"
run("^to-da.*", "newyork-to-dallas1"); => No match (not at the beginning)
run("^to-da.*", "n1"); => No match

查看完整demo program on CodingGround

关于c - 正则表达式 C 无法按预期使用通配符 * 和插入符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30310953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com