5

所以我的教授给了我一个在 c++ 中使用正则表达式的工作。

所以我尝试在eclipse中编写我的代码(我使用的是linux(ubuntu 12.04))。

所以我拿了代码:

   // regex_search example
#include <iostream>
#include <string>
#include <regex>

int main ()
{
  std::string s ("this subject has a submarine as a subsequence");
  std::smatch m;
  std::regex e ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"

  std::cout << "Target sequence: " << s << std::endl;
  std::cout << "Regular expression: /\\b(sub)([^ ]*)/" << std::endl;
  std::cout << "The following matches and submatches were found:" << std::endl;

  while (std::regex_search (s,m,e)) {
    for (auto x:m) std::cout << x << " ";
    std::cout << std::endl;
    s = m.suffix().str();
  }

  return 0;
}

如您所见,这是一个使用正则表达式的简单代码。

所以我尝试构建它,eclipse给了我一个错误:

Type 'smatch' could not be resolved

并且:

Type 'std::regex' could not be resolved

问题是什么 ?

我试图在合适的位置添加标志 -std=c++0x (properties->c/c++ build ->Miscellaneous),但什么也没发生。

也许我做错了?

也许我必须像在 pthread 中添加指向库的链接?

4

3 回答 3

4

我的设置:

操作系统:Ubuntu 14.04 编译器:GCC 4.8.2 IDE:Eclipse 3.8.1

问题:

我已将 regex ( #include <regex>) 包含到我的头文件中,但我的 IDE 一直在抱怨无法解决“某事”类型。我已经尝试使用诸如 std:: 和 std::tr1 之类的命名空间,就像谷歌的人所建议的那样,但没有成功。

解决方案:

解决方案就像问题本身一样简单。如果您查看 usr/include/c++/4.8,您会注意到根文件夹中的正则表达式文件是一种存根。但是 /tr1 文件夹中还有另一个正则表达式文件。

诀窍是,#include <regex>你应该写而不是写#include <tr1/regex>

之后,您可以通过 std::tr1:: 命名空间使用正则表达式。

例如像这样:std::tr1::smatch

希望有帮助!

© http://antaumus.blogspot.com/2014/08/how-to-use-regex-with-gcc-482.html

于 2016-04-16T15:33:22.697 回答
0

该标志还不够,您还必须在“C/C++ General -> Paths and Symbols -> Symbols -> GNU C++”中添加预处理器符号“____GXX_EXPERIMENTAL_CXX0X____”。详情请参考以下问题: Eclipse CDT C++11/C++0x support。它也在 Eclipse wiki 中: http ://wiki.eclipse.org/CDT/User/FAQ#CDT_does_not_recognize_C.2B.2B11_features 。第二个链接还具有一个附加链接,指向描述“隐藏”选项的论坛页面(http://www.eclipse.org/forums/index.php/mv/msg/373462/909018/#msg_909018)。如果您按照链接中的说明使用“隐藏”选项配置编译器,则在再次删除“____GXX_EXPERIMENTAL_CXX0X____”标志后它仍然有效。

于 2013-10-28T23:33:08.730 回答
0

正则表达式添加在std::tr1命名空间下。请为您的正则表达式声明对象 std::tr1::regex,它应该可以工作

于 2013-07-10T11:41:32.883 回答