vc/mfc/vs2005下正则表达式源代码编程/微软greta Regular Expressions
时间:2011-02-08 来源:oayx
2.greta是微软的正则表达式封装,不过看它说明除了windows下可以用,linux其实也可以用(c++)。
3.greta实在vc6下发布的,用vs2005编译,会报错:
具体错误参照:social.microsoft.com/Forums/zh-TW/vcgeneral/thread/7461e68d-739d-4b36-a068-1c12a827e594 ,“Greta Parser for VS2005”,就是:
'regex::hetero_stack<AlignmentT,RuntimeTypeCheckT,AssumePodT,DynamicBlockSizeT,StaticBlockSizeT>:tack_node::header' : dependent name is not a type
解决办法:在模板定义的tack_node前面加上struct即可。
4.其他参数说明(如区分大小写)
NOCASE 不区分大小写。
GLOBAL 全局。如果指定该参数,rpattern::subsitute 会将串中全部匹配表达式的参数替换;否则(默认),若指定了 RIGHTMOST 参数,替换最后一个,没有指定(默认),替换第一个。
MULTILINE 若不指定(默认),'^' 匹配串的开头,'$' 匹配串的结束;若指定,^ 匹配行开头,$ 匹配行结束。
SINGLELINE 若不指定(默认),'.' 匹配除换行符(\n)外的任何字符;若指定,'.'也匹配换行符。SINGLELINE 看起来和 MULTILINE 不可一起用,其实她们的含义不是矛盾的,可以一起用。这是 GRETA 的 sb 之处,不知道是否从 perl copy过来的。
RIGHTMOST 查找最右边的、最长的匹配串。默认是找左边的、最长的匹配串。btw, 在正则表达式中加 ? 可以使表达式找最短的匹配串。如串"test",re ".+" 会匹配整个 "test" 串,而 re ".+?" 则只匹配 "t"。
NOBACKREFS 不记录 backref 。替换时用上此参数,可大幅度提高速度。这是文档上说的,俺没有试过。
ALLBACKREFS 参见 match_results::all_backref 的解释。