我正在嘗試將此正則運算式^%-?\ ?#?0?$與匹配regexec,它在此站點上運行良好,但可能有問題,因為 regexec 不起作用:
#include <regex.h>
#include <stdio.h>
int main(void) {
regex_t regex;
if (regcomp(®ex, "^%-?\\ ?#?0?$", 0) != 0) {
return -1;
}
const int match = regexec(®ex, "%-", 0, NULL, REG_EXTENDED);
if (match == 0) {
puts("Matched !");
}
else {
puts("Not found !");
}
return 0;
}
此示例應顯示“匹配”,但顯示“未找到”。問題是否來自我的正則運算式?
uj5u.com熱心網友回復:
該REG_EXTENDED標志應該在編譯正則運算式時設定regcomp,而不是在匹配時設定regexec。如果你這樣做,它會起作用,所以:
if (regcomp(®ex, "^%-?\\ ?#?0?$", REG_EXTENDED) != 0) {
return -1;
}
const int match = regexec(®ex, "%-", 0, NULL, 0);
(我不知道 POSIX 是否要求標志的具體值,但在我的實作中,編譯標志REG_EXTENDED與匹配標志具有相同的值REG_NOTBOL,它總是無法將字串的開頭與 匹配^。)
uj5u.com熱心網友回復:
如果有人稍后會閱讀此頁面,則最終代碼為:
int main(void) {
regex_t regex;
if (regcomp(®ex, "^%-?\\ ?#?0?$", REG_EXTENDED) != 0) {
return -1;
}
const int match = regexec(®ex, "%-", 0, NULL, 0);
if (match == 0) {
puts("Matched !");
}
else {
puts("Not found !");
}
return 0;
}
我在編譯正則運算式時添加了 REG_EXTENDED 標志,但在執行時將其洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/469127.html
上一篇:如何在C中逐一提示輸入?
