1

我正在尝试在我的一个项目中使用 boost 正则表达式。实际上,我正在将我的一个软件移植到 C++,它非常依赖于正则表达式。

我发现这与我以前使用其他 Regex 库的经验相反。我希望有人可以帮助我理解或让我知道是否有额外的标志我可以在 boost 中使用来满足我的要求。

这是主题字符串:

This is an example to test regex `54 6767 98`  thats it

当我使用这个 regex: \\\d*时,我希望得到 54 作为结果(当我在 delphi 中使用 .Net regex 或 TperlRegex 时会发生这种情况)但是当我使用 boost 时,函数返回 TRUE 但 cmatch 为空!

正常吗?我知道我可以使用\d+. 但这不是我需要它工作的重点,因为它会导致我在软件中使用的更复杂的正则表达式中出现许多其他问题。

顺便说一下,这是代码:

cmatch what;
boost::regex re("\\d*", regex::perl | regex::icase);
std::string ssub = "something 54 67 979 some text";
if ( boost::regex_search(ssub.c_str(), what , re )
  return what[0];

我认为在这种情况下它应该返回 54,但事实并非如此。正如我所料,它在 /Net Regex 和 TperlRegex 中工作。

问候

4

1 回答 1

3

'*' 匹配 0 个或更多。您希望 '+' 匹配 1 个或多个。

问题是 \d* 将匹配字符串中的任何位置。要保证它以数字开头,请使用 +。

于 2013-03-17T12:01:35.633 回答