Boost :: regex奇怪的行为

时间:2013-03-17 11:30:53

标签: regex boost

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

我发现这与我之前使用其他Regex库的经历有所不同。 我希望有人可以帮助我理解或告诉我是否有额外的标志我可以用来提升以达到我的要求。

这是主题字符串:

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

当我使用这个正则表达式:\\\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中工作。

此致

1 个答案:

答案 0 :(得分:3)

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

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

相关问题