regcomp 子例程
用途
将指定的基本或扩展正则表达式编译为可执行字符串。
库
标准 C 语言库 (libc. a)
语法
描述
regcomp子程序编译Pattern参数指定的基本正则表达式或扩展正则表达式,并将输出放入Preg参数指向的结构中。
参数
| 项 | 描述 |
|---|---|
| 普雷格 | 指定接收regcomp子程序编译输出的结构。 |
| 模式 | 包含要由regcomp子程序编译的基本正则表达式或扩展正则表达式。 模式 参数的缺省正则表达式类型为基本的正则表达式。 应用程序可以使用REG_EXTENDED标记指定扩展正则表达式。 扩展正则表达式中的子表达式的最大数目为 23。 |
| CFlags | 包含regcomp子程序 0 个或多个标志位的位包容 OR。 这些标志在regex.h文件中定义:
|
返回值
如果成功,regcomp子程序返回值为 0。 否则,将返回另一个表示失败类型的值,而Preg参数的内容则未定义。
错误代码
在出错条件下,下列错误代码的宏名可写入errno全局变量:
| 项 | 描述 |
|---|---|
| REG_BADPAT | 指示无效的基本正则表达式或扩展正则表达式。 |
| REG_ECOLLATE | 指示被引用的整理元素无效。 |
| REG_ECTYPE | 指示无效的字符类型引用。 |
| REG_EESCAPE | 表示拖尾\在模式上。 |
| REG_ESUBREG | 表示\digit无效或有误。 |
| REG_EBRACK | 表示一个[]失衡。 |
| REG_EPAREN | 表示一个\(\)或()失衡。 |
| REG_EBRACE | 表示一个\{\}失衡。 |
| REG_BADBR | 表示\{\}无法使用:不是数字、数字太大、超过两个数字或第一个数字大于第二个数字。 |
| REG_ERANGE | 表示范围表达式中的终点不可用。 |
| REG_ESPACE | 指示内存不足。 |
| REG_BADRPT | 表示 ? (问号) , * (星号) 或 + (加号) 前面没有有效的基本正则表达式或扩展正则表达式。 |
如果regcomp子程序检测到一个非法的基本正则表达式或扩展正则表达式,它可以返回REG_BADPAT错误代码或其他更精确描述错误的代码。
示例
以下示例说明了如何将字符串 (在 串 参数中指定) 与扩展正则表达式 (在 模式 参数中指定) 进行匹配:
#include <sys/types.h>
#include <regex.h>
int
match(char *string, char *pattern)
{
int status;
regex_t re;
if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB) != 0) {
return(0) ; /* report error */
}
status = regexec(&re, string, (size_t) 0, NULL, 0);
regfree(&re);
if (status != 0) {
return(0) ; /* report error */
}
return(1);
}在前面的示例中,错误被视为不匹配。 当没有匹配或出错时,调用进程可以通过调用regerror子程序了解详情。