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()函数来定义字符串缩写的。要定义新的缩写形式,我们只需要这样:
更多精彩
赞助商链接