boost正则库匹配ANSII编码的中文、全角字符示例
2008-11-20 15:56
411 查看
===================================
本人log中所有未注明转载的文章和blog一般为本人原创或整理加工,
原创文章版权本人(lonefox)所有;转载文章版权归原作者所有;
http://blog.csdn.net/boythl
欢迎转载,但请注明出处,保留作者和版权信息。
===================================
首先,boost正则库(regex)不支持形如 [0-9] (注意:这个0和9是全角字符。)这样的表达式,貌似会崩溃。
现在查网上正则匹配中文的例子,都是讲用 /uFF00-/uFFFF ; 拜托,/u是unicode编码,能用于我常用的ansii编码(如GB18030,GBK,GB2312等等)吗?举例时也不说清楚。
再次查看正则语法,发现 /xnn 比较有用,/x匹配ASCII编码中十六进制代码为nn的字符,注意,是单个字符,因此,对于双字节的全角,我们需要用两个/x才能匹配一个全角字符。举例如下(下文示例全部使用ANSII编码,GB2312或GB18030):
全角数字:0123456789 (/xA3[/xB0-/xB9])+ , 0是/xA3/xB0
全角小写字母:az (/xA3[/xE1-/xFA])+, a是/xA3/xE1 z是/xA3/xFA
全角大写字母:AZ (/xA3[/xC1-/xDA])+ ,A是/xA3/xC1 Z是/xA3/xDA
其他汉字也类似,有需要的可以自己查查编码。 不知道汉字对应的ANSII编码?使用UltraEdit32,输入汉字后按CTRL+H,就可以看到16进制的编码。
下面贡献一个我自己项目时临时写的测试正则表达式的小工具。 只提供简单的测试表达式是否匹配文本的功能。使用自己封装的boost::regex库完成,该库是为了摆脱boost和stlport同时使用时的编译问题而编写。静态链接regex库,因此发布时不需要boost库,以后不用再异常辛苦的编译boost库了。
小测试工具下载地址:http://p.blog.csdn.net/images/p_blog_csdn_net/boythl/EntryImages/20081121/boostRegex.jpg 下载后请将扩展名修改为RAR。
工具代码也十分简单:
void CMy4Dlg::OnButton1()
{
UpdateData();
NAVINFO::CMatch match;
NAVINFO::CRegex reg(this->m_strExpression); //使用默认参数normal,因此表达式是区分大小写的
if (reg.regex_match(this->m_strText, match))//使用默认参数normal
{
CString str = _T("");
str.Format("共有匹配项 %d 个:", match.size());
this->m_strResult = str;
for (int i = 0; i < match.size(); i++)
{
str.Format("/r/n%02d:%s", i, match[i]);
this->m_strResult += str;
}
UpdateData(FALSE);
}
else
{
MessageBox("Unmatch");
}
}
本人log中所有未注明转载的文章和blog一般为本人原创或整理加工,
原创文章版权本人(lonefox)所有;转载文章版权归原作者所有;
http://blog.csdn.net/boythl
欢迎转载,但请注明出处,保留作者和版权信息。
===================================
首先,boost正则库(regex)不支持形如 [0-9] (注意:这个0和9是全角字符。)这样的表达式,貌似会崩溃。
现在查网上正则匹配中文的例子,都是讲用 /uFF00-/uFFFF ; 拜托,/u是unicode编码,能用于我常用的ansii编码(如GB18030,GBK,GB2312等等)吗?举例时也不说清楚。
再次查看正则语法,发现 /xnn 比较有用,/x匹配ASCII编码中十六进制代码为nn的字符,注意,是单个字符,因此,对于双字节的全角,我们需要用两个/x才能匹配一个全角字符。举例如下(下文示例全部使用ANSII编码,GB2312或GB18030):
全角数字:0123456789 (/xA3[/xB0-/xB9])+ , 0是/xA3/xB0
全角小写字母:az (/xA3[/xE1-/xFA])+, a是/xA3/xE1 z是/xA3/xFA
全角大写字母:AZ (/xA3[/xC1-/xDA])+ ,A是/xA3/xC1 Z是/xA3/xDA
其他汉字也类似,有需要的可以自己查查编码。 不知道汉字对应的ANSII编码?使用UltraEdit32,输入汉字后按CTRL+H,就可以看到16进制的编码。
下面贡献一个我自己项目时临时写的测试正则表达式的小工具。 只提供简单的测试表达式是否匹配文本的功能。使用自己封装的boost::regex库完成,该库是为了摆脱boost和stlport同时使用时的编译问题而编写。静态链接regex库,因此发布时不需要boost库,以后不用再异常辛苦的编译boost库了。
小测试工具下载地址:http://p.blog.csdn.net/images/p_blog_csdn_net/boythl/EntryImages/20081121/boostRegex.jpg 下载后请将扩展名修改为RAR。
工具代码也十分简单:
void CMy4Dlg::OnButton1()
{
UpdateData();
NAVINFO::CMatch match;
NAVINFO::CRegex reg(this->m_strExpression); //使用默认参数normal,因此表达式是区分大小写的
if (reg.regex_match(this->m_strText, match))//使用默认参数normal
{
CString str = _T("");
str.Format("共有匹配项 %d 个:", match.size());
this->m_strResult = str;
for (int i = 0; i < match.size(); i++)
{
str.Format("/r/n%02d:%s", i, match[i]);
this->m_strResult += str;
}
UpdateData(FALSE);
}
else
{
MessageBox("Unmatch");
}
}
相关文章推荐
- boost正则库匹配ASII编码的中文、全角字符示例
- boost正则库匹配ASII编码的中文、全角字符示例
- java正则匹配HTML中a标签里的中文字符示例
- php 正则匹配中文及中文字符
- 匹配中文字符的正则表达式
- 匹配Unicode字符的正则表达式(中文)
- 正则表达式 - 中文字符的匹配
- 匹配中文字符的正则表达式: [/u4e00-/u9fa5]
- SqlServer nvarchar中的中文字符匹配,更改SqlServer实例和数据库排序规则的办法
- 【正则表达式】匹配中文字符 整理
- java中匹配字符串中的中文字符(含中文标点的)
- Javascript正则表达式匹配中文字符
- 匹配中文字符的正则表达式: [u4e00-u9fa5]( 转)
- c#中文转unicode字符示例分享
- php 正则表达式匹配中文字符
- vc6.0下 使用boost regex正则表达式匹配带中文的任意字符
- PHP中文全角字符/英文半角转换对照表
- Javascript之屏蔽全角字符及中文
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,倒数第二列, 匹配任意一个字符 :
- 正则表达式匹配中文字符及标点