C++03 的正则表达式库
Regular Expression Library for C++03
>我有一个这种格式的字符串,我需要验证:
H12345-001
这里的第一个字符应该是一个字母字符,后跟 5 位数字,然后是破折号 ( -
),然后是两个零,最后是一个数字。
我不确定正则表达式是正确的选择,还是可以以天真的方式比较每个字符。如果正则表达式是正确的方法,有人可以指出一个示例教程来使用它。我正在使用C++03(即没有C++11)。
假设您的字符串可以包含小写字母,则正则表达式[a-zA-z]ddddd-00d
(如果您不需要小写字母,只需删除a-z
)。
简单的自定义验证器,如果引入正则表达式库不值得(演示):
bool isValid(const std::string& str)
{
return
(str.size() == 10) &&
(('a' <= str[0] && str[0] <= 'z') ||
('A' <= str[0] && str[0] <= 'Z')) &&
('0' <= str[1] && str[1] <= '9') &&
('0' <= str[2] && str[2] <= '9') &&
('0' <= str[3] && str[3] <= '9') &&
('0' <= str[4] && str[4] <= '9') &&
('0' <= str[5] && str[5] <= '9') &&
(str[6] == '-' && str[7] == '0' && str[8] == '0') &&
('0' <= str[9] && str[9] <= '9');
}
你可以使用 Boost.Regex 来实现这一点:
#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>
#include <boost/regex.hpp>
boost::regex your_regex("[A-Z]\d{5}-00\d");
boost::smatch match;
int main() {
std::string input = "H12345-001";
std::string output;
if(boost::regex_match(input, match, your_regex)) {
output = boost::lexical_cast<std::string>(match);
std::cout << output << std::endl;
}
return 0;
}
这是匹配单个匹配项的示例,您需要根据需要对其进行调整。
任何正则表达式库都可以。例如,POISX系统有pcre,您只需#include <regex.h>
并调用regcomp
系列函数( man 3 regcomp 了解更多信息)。其中没有任何内容需要C++11。
坦率地说,如果你要使用正则表达式,对于这个问题来说似乎不值得,一个困难的问题是在C++代码中拥有正确的正则表达式模式,因为必须转义所有的反斜杠和其他东西。您可能想在 SO 中尝试这个很棒的解决方案,以便在 C++<11 中使用正则表达式而没有太大问题。
否则,请遵循Cornstalk的答案。
这个正则表达式非常糟糕,但我能想出的最容易理解的将匹配您想要的。
([A-Z])ddddd-00d
这是根据要求提供的教程:http://en.cppreference.com/w/cpp/regex
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- 用C++编写正则表达式的正确方法是什么?
- 如何从Stroustrup的C++书中解释这个正则表达式?
- 为什么这个正则表达式C++在括号表达式中抛出无效范围异常?
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- C++03 的正则表达式库