regcomp 子例程

用途

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

标准 C 库 (libc. a)

语法

#include <regex.h>

int regcomp ( Preg, 
Pattern,  CFlags)

const char *Preg;
const char *Pattern;
int CFlags;

描述

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

参数

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

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

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

返回值

如果成功, regcomp 子例程将返回值 0。 否则,它将返回另一个指示失败类型的值,并且未定义 Preg 参数的内容。

错误代码

在错误情况下,可以将错误代码的以下宏名称写入 errno 全局变量:

表 2。 错误代码
描述
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 子例程来获取详细信息。