regcmp 或 regex 子例程
用途
编译并匹配正则表达式模式。
库
标准 C 语言库 (libc.a)
程序员工作台库libPW.a)
语法
#include <libgen.h>const char *String, . . . ;
描述
regcmp子程序编译正则表达式(或 模式),并返回指向编译后形式的指针。 regcmp子程序允许多个字符串参数。 如果给出多个 "字符串参数,则 regcmp子程序会将它们视为连接在一起的参数。 如果迂到不正确的参数,那么它将返回空指针。
您可以使用regcmp命令将正则表达式编译到 C 程序中,这样就无需在运行时调用regcmp子程序。
regex子程序将已编译的模式与主题字符串进行比较。 使用其他参数来接收值。 成功完成后,regex子程序会返回指向下一个未匹配字符的指针。 如果regex子程序失败,则返回一个空指针。 全局字符指针__loc1 指向匹配开始的位置。
regcmp和regex子程序借自ed命令,但语法和语义略有不同。 您可以在使用regcmp和 regex子例程时使用以下符号:
| 项 | 描述 |
|---|---|
| [ ] * . ^ | 这些符号的含义与ed命令中的相同。 |
| - | 与regex子程序一起使用时,括号内的减号(或连字符)根据当前的拼写顺序表示 "通过"。 例如,[a-z] 可以等同于 [abcd . .xyz] 或aBbCc. . xYyZz]. 如果-是最后一个字符或第一个字符,那么可以使用-本身。 例如,字符类表达式 [ ] -] 匹配 ](右括号)和 -(减号)字符。(右括号)和 - (减号)字符。 regcmp子程序不使用当前的校对序列,括号中的减号只控制直接的 ASCII 序列。 例如,[a-z] 总是指 [abc . .xyz]和[A-Z]总是指[ABC . . . XYZ] . 如果需要使用regcmp子程序控制范围内的特定字符,必须明确列出这些字符,而不是在字符类表达式中使用减号。 |
| $ | 与字符串的结尾匹配。 使用该 \n 字符来匹配换行符。 |
| + | 后跟 + (加号) 的正则表达式表示一个或多个时间。 例如: [0-9] + 等价于 [0-9] [0-9] *。 |
| { m}{m,}{m,u} | {}(大括号)中的整数值表示应用前面正则表达式的次数。 m字符是最小数字,u字符是最大数字。 u字符必须小于 256。 如果只指定m,则表示应用正则表达式的确切次数。{m,} 等同于{m,u},匹配表达式的m次或更多次出现。 +(加号)和 *(星号)操作分别相当于 "{1,}和 "{0,}"。 |
| ( . . .)$n | 这将在(n+1) ret参数中存储与所附正则表达式匹配的值。 允许 10 个带括号的正则表达式。 regex子程序无条件地进行赋值。 |
| ( . . . ) | 括号组子表达式。 操作符(如 *、+ 或 [ ])适用于单个字符或括号内的正则表达式。 例如,(a*(cb+)*)$0。 |
前面定义的所有符号都是特殊的。 如果要匹配特殊符号本身,必须在其前面加上 (反斜杠)。 例如, \ $与美元符号匹配。
/* . . . Your Program . . . */
malloc(n)
int n;
{
static int rebuf[256] ;
return ((n <= sizeof(rebuf)) ? rebuf : NULL);
} regcmp子程序产生的代码值可被regex子程序解释为正则表达式。 例如,[a-z] 表示范围表达式,regcmp子程序会将其编译成包含两个端点(a 和 z)的字符串。
regex子程序根据当前校对序列解释范围语句。 表达式 [a-z] 可以等同于 [abcd .xyz]或aBbCcDd. . .xXyYzZ],只要减号前面的字符的拼写值低于减号后面的字符。
范围表达式的行为取决于校对序列。 如果您想要匹配一组 具体 字符,那么应该列出每个字符。 例如,要选择字母 a、b 或 c,请使用 [abc] 而不是 [a-c] 。
- 编译时不会对范围中包含的实际字符进行假设。
- 请勿使用多字节字符。
- 您可以在一对括号内使用](右括号)本身,如果它紧跟在前导 [ (左括号)或 [^(左括号后紧跟一个圆括号)之后,则可以在一对括号内使用。
- 如果是表达式中的第一个或最后一个字符,那么还可以使用减号 (或连字符)。 例如,表达式 [ ]-0]匹配右括号 ( ] ) 或字符 - 到 0。
参数
| 项 | 描述 |
|---|---|
| 主体 | 指定比较字符串。 |
| String | 指定要编译的 模式 。 |
| 模式 | 指定要比较的表达式。 |
| 雷 | 指向要用于存储比较数据的地址。 regex子程序允许多个ret 字符串参数。 |