阿杰,我给你整理一份 PCRE(Perl Compatible Regular Expressions)正则库及用法详解,包括概念、安装、常用函数和示例。


一、什么是 PCRE

  • 全称:Perl Compatible Regular Expressions
  • 作用:提供与 Perl 正则表达式兼容的 正则功能库,用于各种编程语言(C、PHP、Python、Java 等)或工具(grep、sed、nginx)中。
  • 特点
    1. 完全兼容 Perl 正则语法
    2. 支持复杂模式匹配(环视、非捕获组、重复限定符)
    3. 高性能,支持编译正则提高匹配速度

二、PCRE 库安装

1. Linux 安装(Ubuntu/Debian)

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev

2. CentOS / RHEL

sudo yum install pcre pcre-devel

3. 验证

pcregrep --version

pcregrep 是支持 PCRE 的 grep 工具


三、PCRE 常用函数(C 语言示例)

函数说明
pcre_compile()编译正则表达式,返回编译后的模式对象
pcre_exec()执行匹配操作
pcre_study()优化正则,提升匹配速度
pcre_free()释放编译后的模式对象
pcre_fullinfo()获取正则信息(捕获组数等)

1. 基本用法(C 示例)

#include <stdio.h>
#include <pcre.h>

int main() {
    const char *error;
    int erroffset;
    pcre *re;

    const char *pattern = "a(b*)c"; // 正则模式
    const char *subject = "abbbc";

    re = pcre_compile(pattern, 0, &error, &erroffset, NULL);
    if (!re) {
        printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);
        return 1;
    }

    int ovector[30]; // 存放匹配结果
    int rc = pcre_exec(re, NULL, subject, strlen(subject), 0, 0, ovector, 30);

    if (rc >= 0) {
        printf("Match found!\n");
    } else {
        printf("No match.\n");
    }

    pcre_free(re);
    return 0;
}


四、常用正则语法(Perl 风格)

语法说明示例
.匹配任意字符a.b → 匹配 acb
*0 或多个重复ab*a, ab, abb
+1 或多个重复ab+ab, abb
?0 或 1 次ab?a, ab
[]字符集[a-z] → 匹配任意小写字母
()捕获分组(abc)+ → 捕获多个 abc
(?: )非捕获分组(?:abc)+
\d数字 [0-9]\d{3} → 三位数字
\w单词字符 [a-zA-Z0-9_]\w+ → 单词
^ / $行首 / 行尾^Hello / world$
(?=...)正向前瞻\d(?=px) → 匹配数字后面跟 px
(?!...)负向前瞻\d(?!px) → 数字后不是 px

五、工具示例

1. 使用 pcregrep 匹配文件

pcregrep "error|fail" logfile.txt

2. 高亮匹配

pcregrep --color "TODO" *.c

3. 递归匹配

pcregrep -r "FIXME" /home/project


六、PCRE 与其他正则库对比

特点适用场景
PCRE完全兼容 Perl 正则,支持高级语法C、PHP、nginx、grep 等
POSIX regex基础正则语法传统 Unix 工具
Python re内置支持,语法类似 PerlPython 脚本
Java java.util.regexJava 内置正则Java 项目

七、小结

  • PCRE 核心价值:在 C/C++ 或系统工具中使用 Perl 风格正则
  • 优势
    • 支持复杂匹配、高级特性
    • 性能高,可编译正则
  • 常见应用
    • 日志分析 (pcregrep)
    • Nginx 配置匹配
    • C/C++ 项目字符串处理