VS2008的C++TR1库已经支持正则表达式

本文介绍了如何在VS2008SP1环境中利用C++TR1库的正则表达式功能,通过示例代码演示如何检查字符串是否为十进制数字。

作者:朱金灿

来源:http://blog.youkuaiyun.com/clever101

 

        发现VS2008的C++ TR1库已经支持正则表达式了(注意装了VS 2008sp1采用TR1库的)。下面简单做个测试,用它来判断一个字符串是否为一个数字:

#include <string> 
#include <regex>

// 检查一个字符串是否为十进制数字
void CheckString()
{
	std::string str1[3];
	bool b[3];
	std::tr1::regex p("-?\\d+\\.?\\d+");
	str1[0] = "-0.2255";
	str1[1] = "0xcadf";
	str1[2] = "123123.-123";
	b[0] = std::tr1::regex_match(str1[0],p);
	b[1] = std::tr1::regex_match(str1[1],p);
	b[2] = std::tr1::regex_match(str1[2],p);

	for (int i=0;i<3;i++)
	{
		if (b[i])
			std::cout<<str1[i]<<" is a decimal!"<<endl;
		else
			std::cout<<str1[i]<<" is not a decimal!"<<endl;
	}
}

int main(int argc, char* argv[])  
{  
   CheckString();
   system("PAUSE");  
   return 0;  
}   

        编译环境为:Win XP+sp3,VS2008 + sp1。这里是对TR1库的一个完整说明:C++ Technical Report 1

### 使用 C++ 正则表达式匹配浮点数 在 C++ 中,可以利用 `<regex>` 头文件中的功能来定义和操作正则表达式。为了匹配浮点数,可以通过编写合适的正则表达式模式并结合 `std::regex` 和相关函数完成此任务。 以下是实现的一个具体例子: #### 定义正则表达式的模式 浮点数通常由整数部分、小数点以及可选的小数部分组成。下面是一个常见的用于匹配浮点数的正则表达式模式: ```cpp [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? ``` 解释如下: - `[-+]?`: 可选的正负号。 - `[0-9]*`: 整数部分,允许为空。 - `\.`: 小数点字符。 - `[0-9]+`: 至少一位小数位。 - `([eE][-+]?[0-9]+)?`: 科学计数法表示的部分,也是可选的。 #### 实现代码示例 以下代码展示了如何使用上述正则表达式来检测字符串是否为有效的浮点数: ```cpp #include <iostream> #include <string> #include <regex> int main() { // 测试字符串数组 const std::vector<std::string> test_strings = {"123", "-123.456", "+789.0e-10", ".25", "abc"}; // 定义正则表达式对象 std::regex float_regex("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?"); for (const auto& str : test_strings) { bool is_float = std::regex_match(str.begin(), str.end(), float_regex); if (is_float) { std::cout << "\"" << str << "\" 是一个合法的浮点数。\n"; } else { std::cout << "\"" << str << "\" 不是合法的浮点数。\n"; } } return 0; } ``` 这段程序会逐一测试给定的字符串列表,并判断它们是否符合预设的浮点数规则[^1]。 #### 关于命名空间的标准说明 需要注意的是,在 C++ 中,标准中与正则表达式相关的类和方法都位于 `std::tr1` 命名空间下。然而,现代 C++ 已经将这些功能集成到核心标准中,因此可以直接通过 `std` 访问而无需显式指定 `tr1`[^2]。 另外,如果需要进一步处理数据结构内的特定数值替换,则可以考虑配合其他 STL 函数一起工作,比如 `std::replace` 来修改容器中的某些元素值[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clever101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值