提升正则表达式不匹配
Boost regex does not match
我做了一个python正则表达式,现在我应该用C++编写程序。
我被告知要使用各自的人使用boost的正则表达式。
它应该匹配一组至少一个到 80 个较低的字母数字字符,包括下划线,后跟一个反斜杠,然后再次匹配另一组至少一个到 80 个较低的字母数字字符,包括下划线和最后一个但并非最不重要的问号。总字符串长度必须至少为 1 个字符,并且不允许超过 256。
这是我的python正则表达式:
^((?P<grp1>[a-z0-9_]{1,80})/(?P<grp2>[a-z0-9_]{1,80})([?])){1,256}$
我目前的提升正则表达式是:
^(([a-z0-9_]{1,80})/([a-z0-9_]{1,80})([?])){1,256}$
基本上我的代码如下所示:
boost::cmatch match;
bool isMatch;
boost::regex myRegex = "^(([a-z0-9_]{1,80})/([a-z0-9_]{1,80})([?])){1,256}$";
isMatch = boost::regex_match(str.c_str(), match, myRegex);
编辑:哎呀完全忘记了xDD的问题。我的问题很简单:正则表达式不匹配,尽管它应该匹配。
示例匹配项为:
- 一些/更多?
- 对象/值?
- 发展42/version_number?
最后一个要求
总字符串长度必须至少为 1 个字符,并且不允许超过 256。
始终为 true,因为您的字符串已限制在 3 到 162 个字符之间。您只需要保留正则表达式的第一部分:
^[a-z0-9_]{1,80}/[a-z0-9_]{1,80}?$
我的 g++ 给我警告"未知转义序列:"\/";这意味着你应该使用"\\/"而不是"\/"。您需要一个存储在字符串中的反斜杠字符,然后让正则表达式解析器将其作为转义触发器吃掉。
顺便说一下,我的 boost 也需要构造函数调用,所以
boost::regex myRegex("^(([a-z0-9_]{1,80})\/([a-z0-9_]{1,80})([?])){1,256}$");
似乎工作。
您还可以使用 C++11 原始字符串文本来避免C++转义:
boost::regex myRegex(R"(^(([a-z0-9_]{1,80})/([a-z0-9_]{1,80})([?])){1,256}$)");
顺便说一下,欢迎在libstdc++ svn中测试<regex>
。它应该附带GCC 4.9;)
实际错误是客户端在输入稍后进行比较的相应字符串时发送到服务器的new line
。
有趣的是,错误的根源很少出现在您期望的位置。
无论如何,谢谢大家的回答。它们使我能够清理我的正则表达式。
- C++:匹配正则表达式,什么是匹配?
- C++ 正则表达式不匹配空格
- 如何提升Perl正则表达式匹配,支持区分大小写/不区分大小写
- C++正则表达式字符类不匹配
- 调试正则表达式不匹配
- 正则表达式在 c++ 中不匹配?
- 正则表达式 - 匹配不遵循特定模式的字符
- 我的 Boost 正则表达式与任何内容都不匹配
- (C++) 确定不匹配的正则表达式捕获组
- C++11 正则表达式匹配不以句点结尾的完整单词
- 为什么regex_match与我的正则表达式不匹配
- 不使用正则表达式的C++多字符串匹配
- 在不使用正则表达式的情况下解析 HTTP 请求
- 在C++中匹配正则表达式的惯用方法
- Boost正则表达式不替换正则表达式网站上正确替换的表达式
- PHP-CPP C++ 扩展找不到正则表达式
- 如何查找给定的字符串是否符合十六进制表示法,例如不带正则表达式的0x34FF
- 如何在c++中匹配正则表达式中的 字符
- 在不使用正则表达式之前和之后输出字符串向量'word'。制定相关程序
- 整数匹配正则表达式模式不工作