deelx-使用C++开发而成的一个优秀的正则表达式库

deelx是一个C++写成的非常优秀的正则表达式库,我在开发menthol语言时,Regex模块就是采用了deelx。

对于deelx官方说法:

deelx 是一个在 C++ 环境下的与 Perl 兼容的正则表达式引擎。是 RegExLab 开展的一个研究开发项目。

基本特点:

  1. 支持与 Perl 兼容的正则表达式语法。
  2. 支持 IGNORECASE, SINGLELINE, MULTILINE 等常见匹配模式。
  3. 兼容性强,能在 vc6, vc7, vc8, gcc, Turbo C++ 等大多数 C++ 环境编译。
  4. 支持命名分组,条件表达式,递归表达式等多种高级特性。(1.2版本新特点)

deelx的使用非常简单,就一个头发文件deelx.h,100来K,不过功能丝毫不逊色,完成我们日常的开发、使用,绰绰有余.

1.调用构造方法

CRegexpT(const CHART * pattern, int flag = NO_FLAG);

pattern为正则表达式

2.替换后得到的新字符串。

CHART * Replace(const CHART * str, const CHART * rplto, int start = -1, int ntimes = -1) const;

这个新字符串是替换过程中分配的字符串,使用完毕后,需要调用 CRegexpT::ReleaseString 进行释放。

实例:

static CRegexpT<char> regexp(正则表达式);
char* s = regexp.Replace(被替换的字符串, 替换为字符串);
regexp.ReleaseString(s);

3.返回非零值表示匹配成功,返回 0 表示匹配失败。

int IsMatched() const;

4.回匹配结果 MatchResult 对象。

MatchResult Match(const CHART * tstring) const;

通过 MatchResult 对象,可以得知是否匹配成功。如果成功,通过 MatchResult 对象可以获取捕获信息。
实例:

static CRegexpT<char> regexp(正则表达式);
MatchResult result = regexp.Match(字符串);
while (result.IsMatched())
{
    return true;
}
return false;

5.获取开始位置,匹配成功后,获取所匹配到的子字符串的开始位置。如果匹配失败,则返回负值。

int GetStart() const;

6.获取结束位置,匹配成功后,获取所匹配到的子字符串的结束位置。如果匹配失败,则返回负值。

int GetEnd() const;

7.返回最大分组编号。

int MaxGroupNumber() const;

8.获取分组开始位置.返回指定分组捕获的字符串的开始位置。如果指定分组未捕获,则返回负值。

int GetGroupStart(int nGroupNumber) const;

9.获取分组结束位置.返回指定分组捕获的字符串的结束位置。如果指定分组未捕获,则返回负值。

int GetGroupEnd(int nGroupNumber) const;

10.匹配准备.经过初始化的查找匹配上下文对象,用来在 Match(CContext * pContext) 中使用。

CContext * PrepareMatch(const CHART * tstring) const;

11.由 PrepareMatch 返回的上下文对象。

static void ReleaseContext(CContext * pContext);

12.释放字符串.释放由 Replace 返回的字符串。

static void ReleaseString(CHART * tstring);

实例:

char* pText = (字符串);
   static CRegexpT<char> regexp(正则表达式);
   CContext * pContext = regexp.PrepareMatch(pText);
   MatchResult result = regexp.Match(pContext);
   while (result.IsMatched())
   {
       int start = result.GetStart();
       int end = result.GetEnd();
       char* s0 = (char*)malloc(end - start + 1);
       memset(s0, 0, end - start + 1);
       s0[end - start] = 0;
       strncpy(s0, pText + start, (pText + end) - (pText + start));
       printf("%s",s);
       free(s0);
       for (int i = 1; i <= result.MaxGroupNumber(); i++){
           int _start = result.GetGroupStart(i);
           int _end = result.GetGroupEnd(i);
           char* s = (char*)malloc(_end - _start + 1);
           memset(s, 0, _end - _start + 1);
           s[_end - _start] = 0;
           strncpy(s, pText + _start, (pText + _end) - (pText + _start));
           printf("%s",s);
           free(s);
       }
       result = regexp.Match(pContext);
   }
   regexp.ReleaseContext(pContext);

以上便是deelx基本全部的函数和方法,可以说基本没有使用难度,非常小巧灵活,十分易于开发,如果想了解更多的使用方法
可以查看我开发的menthol语言的Regex模块实现