c - 如何检查一个单词是否是介词(使用 C 中的正则表达式)
问题描述
我用 C 读了一段文字,我想用正则表达式检查当前单词是否是介词
我已经尝试过了,但它没有用
int function(const char *testRegex){
regex_t regex;
if(regcomp(®ex, "^(a|an|the|in|on|of|and|is|are)$", 0)) {
// handle error
}
int value;
value = regexec(®ex, testRegex, 0, NULL, 0);
return value;
}
如果我通过函数任何单词它总是返回它不匹配即使我通过 (a, an, the...)
那么问题是什么?
解决方案
"^(a|an|the|in|on|of|and|is|are)$"
是一个扩展的正则表达式:你应该传递REG_EXTENDED
给regcomp
.
另请注意,regexec
返回0
匹配项和regex_t
必须释放对象以避免内存泄漏。
#include <stdio.h>
#include <regex.h>
int isprep(const char *testRegex) {
regex_t regex;
int match;
if (regcomp(®ex, "^(a|an|the|in|on|of|and|is|are)$", REG_EXTENDED)) {
return -1;
}
match = !regexec(®ex, testRegex, 0, NULL, 0);
regfree(®ex);
return match;
}
int main() {
printf("a -> %d\n", isprep("a"));
printf("an -> %d\n", isprep("an"));
printf("ann -> %d\n", isprep("ann"));
return 0;
}
输出:
a -> 1
an -> 1
ann -> 0
基本正则表达式在指定子表达式\
之前需要 a(
并且不支持替换 ( foo|bar
)。
在Open Group 文档中查看更多详细信息。
推荐阅读
- javascript - this.function 与 this.fction() Javascript/Typescript
- javascript - 无法运行简单的 GET 方法 XHR/AJAX javascript 程序
- c - C中是否有任何函数可以将数组的内存地址存储到变量中?什么类型的变量会存储这个地址?
- haskell - 如何分叉标准输出?
- operating-system - 内核空间中的代码,用于交换两个不重叠的 4KB 数组的内容
- python - Python多处理一个类方法
- java - 禁用转义的 Java XML 文档 XPath
- linux - 发送邮件到 linux 服务器
- python - Python:获取实时聊天但太慢
- kubernetes - Pod 仍然是 ContainerCreating。networkPlugin cni 无法设置 pod netplugin 失败,没有错误消息