regcomp 子例程

用途

将指定的基本或扩展正则表达式编译为可执行字符串。

标准 C 语言库 (libc. a)

语法

#include <regex.h>
int regcomp ( Preg Pattern CFlags)
const char *Preg;
const char *Pattern;
int CFlags;

描述

regcomp子程序编译Pattern参数指定的基本正则表达式或扩展正则表达式,并将输出放入Preg参数指向的结构中。

参数

描述
普雷格 指定接收regcomp子程序编译输出的结构。
模式 包含要由regcomp子程序编译的基本正则表达式或扩展正则表达式。

模式 参数的缺省正则表达式类型为基本的正则表达式。 应用程序可以使用REG_EXTENDED标记指定扩展正则表达式。 扩展正则表达式中的子表达式的最大数目为 23。

CFlags 包含regcomp子程序 0 个或多个标志位的位包容 OR。 这些标志在regex.h文件中定义:
REG_EXTENDED
使用扩展正则表达式。 扩展正则表达式中的子表达式的最大数目为 23。
REG_ICASE
忽略匹配中的大小写。
REG_NOSUB
只报告regexec子程序的成功或失败。 如果未设置该标志,regcomp子程序会将re_nsub结构设置为在Pattern参数中找到的括号表达式的数目。
REG_NEWLINE
禁止 . (句号)和非匹配括号表达式与换行符的匹配。 该 ^(和 $(美元符号)将匹配紧接换行符之后或之前的零长度字符串。

返回值

如果成功,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子程序了解详情。