提升正则表达式不匹配

Boost regex does not match

本文关键字:不匹配 正则表达式      更新时间:2023-10-16

我做了一个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

有趣的是,错误的根源很少出现在您期望的位置。

无论如何,谢谢大家的回答。它们使我能够清理我的正则表达式。