regcmp 或 regex 子例程
用途
编译并匹配正则表达式模式。
库
标准 C 库 ( libc.a )
程序员工作台库 (libPW.a)
语法
描述
regcmp 子例程编译正则表达式 (或 Pattern) 并返回指向已编译格式的指针。 regcmp 子例程允许多个 String 参数。 如果给出了多个 String 参数,那么 regcmp 子例程会将它们视为连接在一起。 如果迂到不正确的参数,那么它将返回空指针。
您可以使用 regcmp 命令将正则表达式编译到 C 程序中,从而经常不需要在运行时调用 regcmp 子例程。
regex 子例程将已编译的 Pattern 与 Subject 字符串进行比较。 使用其他参数来接收值。 成功完成后,regex 子例程将返回指向下一个不匹配字符的指针。 如果regex 子例程失败,那么将返回空指针。 全局字符指针 __loc1指向匹配开始的位置。
regcmp 和 regex 子例程是从 ed 命令中借用的,但是语法和语义已稍作更改。 可以将以下符号与 regcmp 和 regex 子例程配合使用:
| 项 | 描述 |
|---|---|
[ ] * . ^ |
这些符号的含义与它们在 ed 命令中的含义相同。 |
- |
与regex 子例程配合使用的方括号内的减号 (或连字符) 根据当前整理顺序表示 "through"。 例如, [a-z] 可以等同于 [abcd . . . xyz] 或 [aBbCc . . . xYyZz]。 如果-是最后一个字符或第一个字符,那么可以使用-本身。 例如,字符类表达式 []-] 与] (右括号) 和-(减号) 字符匹配。regcmp 子例程不使用当前整理顺序,方括号中的减号仅控制直接 ASCII 序列。 例如, [a-z] 始终表示 |
$ |
与字符串的结尾匹配。 使用该 \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) th 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 子例程根据当前整理顺序来解释 range 语句。 表达式 [a-z] 可以等同于 [abcd . . . Xyz] 或 [aBbCcDd . . . xXyYzZ],只要字符 前 减号具有比字符 追随 减号更低的整理值。
范围表达式的行为取决于整理顺序。 如果您想要匹配一组 具体 字符,那么应该列出每个字符。 例如,要选择字母 a , b 或 c ,请使用 [abc] 而不是 [a-c]。
- 在编译时,不会对该范围中包含的实际字符进行任何假定。
- 请勿使用多字节字符。
- 如果
](右括号) 本身紧跟在前导[(左括号后面) 或[^(左括号后面紧跟音调) ,那么可以在一对括号内使用该自身。 - 如果是表达式中的第一个或最后一个字符,那么还可以使用减号 (或连字符)。 例如,表达式
[ ] -0]与右括号( ] ),或字符到 0 匹配。
参数
| 项 | 描述 |
|---|---|
| 主体 | 指定比较字符串。 |
| String | 指定要编译的 模式 。 |
| 模式 | 指定要比较的表达式。 |
| 雷 | 指向要用于存储比较数据的地址。 regex 子例程允许多个 ret String 参数。 |