WEB开发网
开发学院软件开发VC ATL正则表达式库使用 阅读

ATL正则表达式库使用

 2006-07-21 11:45:51 来源:WEB开发网   
核心提示: 0: "http"1: "search.microsoft.com"2: "/us/Search.asp"3: "qu=atl&boolean=ALL"4: "results"例子中所用的正

0: "http"

1: "search.microsoft.com"

2: "/us/Search.asp"

3: "qu=atl&boolean=ALL"

4: "results"

例子中所用的正则表达式为:

({[^:/?#]+}:)?(//{[^/?#]*})?{[^?#]*}(?{[^#]*})?(#{.*})?

以()为分界标志,共分成5组,第一组是{[^:/?#]+}:,^是“非”后面成员的意思,那么也就是说第一组从开头开始,一直到:、/、?、#其中任何一个结束。联系后面的待匹配字符串就可以得出所匹配的结果是http。

4、 自定义匹配字符串的缩写形式

为了方便,ATL已经帮我们定义了一些经常用到的正则表达式的简略形式。例如:\d代表([0-9])、\n代表(\r|(\r?\n))等。这些缩写形式都体现在CAtlRECharTraitsA/CAtlRECharTraitsW等类中,把这些类作为模板参数传递给CATLRegExp和 CAtlREMatchContext,我们就可以定义自己的匹配字符串缩写了。

class CAtlRECharTraitsA
{
  static const RECHARTYPE** GetAbbrevs()
  {
    static const RECHARTYPE *s_szAbbrevs[] =
    {
      "a([a-zA-Z0-9])",  // alpha numeric
      "b([ \\t])",    // white space (blank)
      "c([a-zA-Z])", // alpha
      "d([0-9])",   // digit
      "h([0-9a-fA-F])",  // hex digit
      "n(\r|(\r?\n))",  // newline
      "q(\"[^\"]*\")|(\''''[^\'''']*\'''')",  // quoted string
      "w([a-zA-Z]+)", // simple word
      "z([0-9]+)",    // integer
      NULL
    };
    return s_szAbbrevs;
  }
};

以上是atlrx.h摘录下来的代码,可以很清楚地看到ATL是通过一个GetAbbrevs()函数来定义字符串缩写的。要定义新的缩写形式,我们只需要这样:

上一页  1 2 3 4  下一页

Tags:ATL 正则 表达式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接